web-dev-qa-db-ja.com

切り捨て/大きな挿入の後にインデックスを再構築する必要がありますか?

(他のテーブルのデータ、計算などに基づいて)新しいデータを挿入する前に、約175万行のテーブルを切り捨てるストアドプロシージャがあります。

基本的なアウトラインは非常にシンプルです:

  • テーブルを切り捨て
  • 時間あたり約75,000の「バッチ」に175万行を挿入します。

このプロセスでいつでも明示的にインデックスを再構築する必要があるかどうか疑問に思っていますか?例えば.

  • テーブルを切り捨て
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [または類似したもの]
  • 175万行挿入

多分

  • _ALTER INDEX ALL ON xxx DISABLE_
  • テーブルを切り捨て
  • 175万行挿入
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [または類似したもの]

どんな支援も感謝します... DBAではなく-DBをかなりよく知っている開発者はより正確です!

10
BlueChippy

このタイプのほとんどの質問と同様に、状況によって異なります。関連するすべてのインデックスについてデータを「正しい」順序で挿入することはほとんどありません。つまり、これらのインデックスはすべて、挿入プロセス中に多くのページ分割が発生する可能性があります。したがって、クラスター化インデックスの順序で挿入していると仮定しましょう。すべての非クラスター化インデックスを無効にし、切り捨てて挿入を実行してから、すべての非クラスター化インデックスを再構築できます。もちろん、両方のアプローチを試すと、その背後にある理論に関係なく、どちらが真実であるかがわかります。 :)

6
Ben Thul

すべてのインデックスを有効にしてBasicを計画すると、速度が遅くなり、断片化が発生する可能性があります。

切り捨てられた、したがって空のテーブルでのALTER INDEX REBUILDは目的を果たさないため、プランAを修正する必要があります。

  • 切り捨て
  • インサート
  • ALTER INDEX再構築

遅いかもしれませんが、少なくともシャープなインデックスが得られます。

プランBで結構です。 3つすべてをテストし、どれが最も速く、どちらがインデックスの断片化を最小限にするかを確認します。次に、再構築する価値があるかどうかを判断します。

1
Orbilin