SQL始终获取索引扫描

时间:2017-04-18 13:08:20

标签: sql-server performance tsql

我在TSQL中有这样的查询

SELECT TOP 10 [e].[id], [e].[Title]
FROM [Table] AS [e]
WHERE (([e].[Confirmed] = 1) AND ([e].[Deleted] = 0)) AND ([e].
[Status] <> 3)
ORDER BY [e].[CreatedOn] DESC

无论我做了什么索引,我总是得到索引而不是搜索 包括,条件索引,无论我做什么,我总是得到一个索引扫描

我尝试的最后一件事是

 CREATE NONCLUSTERED INDEX [UIXF-x] ON [dbo].[Table]
(
 [CreatedOn] DESC

)
 INCLUDE (  [id],
            [Title] ) 
WHERE ([Confirmed]=(1) AND [Deleted]=(0) AND [Status] !=(3))
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, 
DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = 
ON) ON [PRIMARY]
GO

我怎样才能获得索引?我尝试了一切。为什么我不能得到索引?

1 个答案:

答案 0 :(得分:0)

索引是树,索引扫描是树遍历(选择第一个/最后一个节点) - 正是你想要的。

索引搜索 - 使用给定谓词(搜索条件)在树中搜索。在您的查询中,您没有谓词,这就是为什么找不到索引的原因。

您可以在查询计划的节点属性中查看谓词(当然,如果存在)

WHERE (([e].[Confirmed] = 1) AND ([e].[Deleted] = 0)) AND ([e]. [Status] <> 3)不是索引的谓词