我有如下表:为什么这个查询中没有使用聚集索引?
CREATE TABLE [Cache].[Marker](
[ID] [int] NOT NULL,
[SubID] [varchar](15) NOT NULL,
[ReadTime] [datetime] NOT NULL,
[EquipmentID] [varchar](25) NULL,
[Sequence] [int] NULL
) ON [PRIMARY]
用下面聚集索引:
CREATE UNIQUE CLUSTERED INDEX [IX_Marker_EquipmentID_ReadTime_SubID] ON [Cache].[Marker]
(
[EquipmentID] ASC,
[ReadTime] ASC,
[SubID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
而这个查询:
Declare @EquipmentId nvarchar(50)
Set @EquipmentId = 'KLM52B-MARKER'
SELECT TOP 1
cr.C44DistId,
cr.C473RightLotId
From Cache.Marker m
INNER JOIN Cache.vwCoaterRecipe AS cr ON cr.MarkerId = m.ID
Where m.EquipmentID = @EquipmentId And m.ReadTime >= '3/1/2013'
ORDER BY m.Id desc
这里是正在生成的查询计划:
我的问题是这样的。为什么Cache.Marker表上的聚簇索引不是用于查找而是在另一个索引上进行扫描?此外,SSMS查询分析器建议我在包含ID和EquipmentID列的Marker.ReadTime上添加一个索引。
Cache.Marker表中大约有1M行。
@pst - 我不跟着你。 – 2013-03-07 20:43:38
你可以在查询中用'KLM52B-MARKER'代替@EquipmentID吗?你没有得到所需的索引变量? – bobs 2013-03-07 20:49:01
为什么人们总是认为聚集索引始终是满足任何查询的最快方法? – 2013-03-07 20:59:31