2016-12-16 15 views
1

2TBのデータを持つデータベースを取得しましたが、いくつかの行を削除して無駄な列を削除して500Goに減らしたいのですが、最適化のアイディアがあります。前にいくつかの質問。SQLデータベースのディスク容量を減らす

データベースに1つの.mdfファイルと9つの.ndfファイルがあり、各ファイルの初期サイズは100Goです。

  1. 各.ndfファイルの初期サイズを50Goに減らす必要がありますか?この操作は自分のデータに影響を及ぼしますか?
  2. インデックスを削除するとスペースを節約できますか?

PS:私のデータベースは、1つのクラスタ化インデックスと他の二つの非クラスタ化インデックスを持っているだけで1つのテーブルが含まれ、

  • 私はinsertdate列を削除する二つの非クラスタ化インデックス
  • を削除したいです

あなたが最適化の任意の他のアイデアを持っている場合、それは非常に参考になる

+0

データベースにテーブルが1つしかなく、リレーショナル機能を使用していない場合は、独自のフラットファイルストアとインデックスシステムを実装する方がよい場合があります。 – Dai

+0

最初のファイルサイズを小さくすることはできません(ただし、最近のバージョンのSQL Serverで変更されていない場合) – DavidG

+0

最初のファイルサイズに基づいて別のデータベースを作成することをお勧めしますか? –

答えて

1

インデックスを削除する前に、これらの2つのビューを実行します。

sys.dm_db_index_usage_stats

sys.dm_db_index_operational_stats

彼らはそれらのいずれかがクエリをサポートするために使用されているかどうかを知るようになります。最後に、索引を削除して、2TB表の全表スキャンを開始します。

テーブルをリレーショナルモデルに分割できない場合は、これらを最初に試してください。

  1. データタイプを確認してください。

- NVARCHARをVARCHARまたはNCHARでCHARに置き換えることができますか? (彼らはスペースの半分を占める)

- あなたのテーブルの経験多くの更新プログラムや多くの挿入(上のビューはこれを教えてくれるでしょうか?更新が非常に少ない場合は、CHARフィールドをVARCHARフィールドに変更することを検討してください。重い更新は、ページの分割を引き起こし、ページの充実度が低下する可能性があります。列が唯一の時間がないと日付を保存すること

-CHECKは数値フィールドで

-CHECK値の範囲は、すなわちSMALLINTの代わりのIntを試してみて、使用日時として宣言されていません。

  1. 表のアクティビティを参照して、&の挿入動作を更新してください。アクティビティがページの再配置が非常に少ない場合、フィルファクタを増やすことを検討してください。

  2. Plan Cacheを見て、大量のクエリがテーブルの特定の部分に焦点を当て、フィルタリングされたインデックスを実装している場合は、テーブルがどのようにクエリされているかを知ることができます。

  3. クラスタ化インデックスは一意ですか?そうでない場合、SQLはボンネットの下に一意性を作成する「隠された余分な整数列」を作成します。

+0

データ型私はvarchar(22)、varbinary(max)、ビット、および日付を取得しました。 テーブルは静的なテーブルです。将来変更されることはありません。ユーザーがカラムを検索してカラムを一意にするために必要なのは、クラスタ化されたインデックスのみです。 –

+0

良い情報をありがとうが、それは私のケースで私を助けなかった:) –

+0

varbinaryは、varbinaryは、 "スーパーディメンション"を作成することができますし、テーブル内にたくさんの重複が含まれている場合は、次元の一意の値にリンクするInteger。 – pacreely

関連する問題