我有如下表:爲什麼這個查詢中沒有使用聚集索引?
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