計画の最上位レベルは、ベーステーブル(クラスター化インデックス)から行を削除し、4つの非クラスター化インデックスを維持することに関係しています。これらのインデックスのうち2つは、クラスター化インデックスの削除が処理されるときに、行ごとに維持されます。これらは、以下の緑色で強調表示されている「+2非クラスター化インデックス」です。
他の2つの非クラスター化インデックスについては、オプティマイザーはこれらのインデックスのキーをtempdb作業テーブル(Eagerスプール)に保存してから、スプールを2回再生し、インデックスキーでソートして、シーケンシャルアクセスパターンを促進するのが最善であると判断しました。
操作の最後のシーケンスはxml
、DDLスクリプトに含まれていないプライマリインデックスとセカンダリインデックスの維持に関係しています。
これについて行うことはあまりありません。非クラスター化インデックスとxml
インデックスは、ベーステーブルのデータと常に同期している必要があります。そのようなインデックスを維持するコストは、テーブルに追加のインデックスを作成するときに行うトレードオフの一部です。
とはxml
いえ、インデックスは特に問題があります。この状況でオプティマイザが適格な行数を正確に評価することは非常に困難です。実際、これはxml
インデックスを大幅に過大評価しているため、このクエリには約12 GBのメモリが割り当てられています(実行時に使用されるのは28 MBのみです)。
過度のメモリ許可の影響を減らすことを期待して、小さなバッチで削除を実行することを検討できます。
を使用して、並べ替えなしで計画のパフォーマンスをテストすることもできOPTION (QUERYTRACEON 8795)
ます。これは文書化されていないトレースフラグなので、本番環境では決して開発またはテストシステムでのみ試行してください。結果のプランがはるかに高速である場合、プランXMLをキャプチャし、それを使用して本番クエリのプランガイドを作成できます。