创建覆盖非聚集索引以满足给定查询的要求。如果索引中不存在一列,则 SQL Server 将需要执行键查找。为了防止键查找,创建了一个覆盖索引,但我不明白为什么下面是一个覆盖索引,而其中一列不包括在内。
数据库: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 的覆盖索引?