特定のクエリの要件を満たすために、カバーする非クラスター化インデックスが作成されます。インデックスに 1 つの列が存在しない場合、SQL サーバーはキー ルックアップを実行する必要があります。キー ルックアップを防ぐために、カバリング インデックスが作成されますが、列の 1 つが含まれていないのに、以下がカバリング インデックスである理由がわかりません。
データベース: Adventureworks 2008 R2 テーブル: Production.WorkOrder インデックス名: IX_WorkOrder_ProductID
クエリ:
SELECT WorkOrderID,StartDate
FROM Production.WorkOrder
WHERE ProductID = 757;
インデックス IX_WorkOrder_ProductID は列 ProductID のみで始まります。これは削除され、次のように再作成されます。
CREATE INDEX IX_WorkOrder_ProductID
ON Production.WorkOrder (ProductID)
INCLUDE (StartDate);
実際の実行計画を実行した後、100% のコストでインデックス シーク (非クラスター化) を使用します。
私の質問は次のとおりです。列 WorkOrderID をインデックス IX_WorkOrder_ProductID に含める必要がないのはなぜですか? なぜ WorkOrderID のないカバリング インデックスなのですか?