6

私はこれがすでに議論されていることを知っていますが、私が行くことができる信頼できる答えを見つけることができませんでした.

100 億のレコードを含むテーブルがあり、where 句に ID 列を含むレコードを削除する必要があるとします。どのオプションを使用する必要がありますか?

オプション 1: インデックスを無効にすると、削除後にインデックスを再配置するためのオーバーヘッドが節約されますが、削除する必要がある行を検索するのに時間がかかります。

オプション 2: 非常に高速に行を検索するインデックスでは何もしませんが、インデックスの再配置には時間がかかる場合があります。

私は 2 のオプションに傾倒していますが、専門家の意見を知りたいですか? :)

4

3 に答える 3

9

100 億のレコードを含むテーブルがあり、where 句に ID 列を含むレコードを削除する必要があるとします。どのオプションを使用する必要がありますか?

テーブルの 10% を超える部分 (10 億レコード) を削除 (または挿入) する場合は、すべての非クラスタインデックスを削除し、レコードを削除してから、非クラスタインデックスを再構築する必要があります。

テーブルの 10% 未満を削除する場合は、インデックスをそのままにしておきます。

10% ルールが SQL Server データベース エンジンに適用されるかどうかを確認するために、自由にパフォーマンス テストを行うことができます。

于 2013-06-05T14:35:47.013 に答える
0

通常、一時的な期間でも、テーブルへの一括挿入のインデックスを削除します。一括挿入が完了すると、インデックスが作成されます。

インデックスは、更新/削除操作でレコードを簡単に見つけるのに役立ちます。そのような場合、インデックスを削除したくないでしょう。

HTH。

于 2013-06-05T14:30:52.593 に答える