【发布时间】:2013-04-25 22:11:25
【问题描述】:
创建覆盖非聚集索引以满足给定查询的要求。 如果索引中不存在一列,则 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 的覆盖索引?
【问题讨论】:
标签: sql indexing sql-server-2008-r2