現象
外部キー制約を使用して連鎖削除に設定したテーブルを使用し、外部キー列の統計情報がテーブル内のキー値の範囲全体をカバーしていないとします (たとえば、データ分布がテーブルに変更された後に統計情報が更新されていない場合など)。 このシナリオでは、統計ヒストグラムで表されていないキー値に対応する行を削除しようとして、クエリ オプティマイザが既定の基数見積もりを使用している場合、削除操作は予想よりも遅くなります。 参照元テーブルで一致する行を検索するために、インデックス スキャン操作が使用される場合があります。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
解決方法
この問題は、次の累積的な更新プログラムで修正SQL Server。
注: この修正プログラムは、オプティマイザ修正プログラムをオンにした場合にのみ有効になります (データベースを対象範囲にした構成オプション、クエリ ヒント、またはトレース フラグ 4199 を使用します)。
製品の累積的な更新プログラムSQL Server。
各バージョンの新しい累積的SQL Serverには、すべての修正プログラムと、以前の累積的な更新プログラムに含まれているすべてのセキュリティ修正プログラムが含まれています。 最新の累積的な更新プログラムを確認SQL Server。
回避策
この問題を回避するには、以下のいずれかの方法を使用します。
-
従来の基数見積もりを使用します。 詳細については、「カーディナ リティ推定 (SQL Server)」を参照してください。
-
外部キー定義から連鎖削除を削除し、親テーブルと子テーブルの間で JOIN を使用して連鎖削除と同等の連鎖削除を実行して、削除操作を実行します。
-
データを削除する前に、親テーブルの統計情報を FULLSCAN で更新します。
関連情報
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。