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


10

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

基本的なアウトラインは非常に簡単です:

  • テーブルを切り捨て
  • 1回あたり約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をかなりよく知っている開発者はより正確です!


テーブル構造、現在存在するインデックス、挿入されるデータの外観(特定の順序ですか?クラスタ化インデックスと一致していますか?)に関する情報がさらに役立ちます。また、このプロセスが完了するまで、このテーブルは使用できないと思いますか?これは、一括インポートのオプションがあることを知っておくと便利です。
マイクウォルシュ

おそらく、テーブルへの挿入を切り捨て、インデックスの断片化を調べて、必要かどうかを確認する必要があります。
ゼーン

v:2008標準。ソースデータは、csv、excel、Oracle、その他のSQLデータベースからこのデータがロードされる前の複数のステージングテーブルです。この段階では、テーブル構造はすべて同じです:6文字のID、3文字のコード、10桁のdecimal(20,5)。主キーはID + Codeです。ロードされているデータinsert intoと現時点ではorder by句はありませんが、それが役立つ場合は追加できますか?IDとコードも個別に索引付けされます。
BlueChippy

回答:


6

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


1

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.