在SQL查询中使用(INDEX(0))

时间:2012-10-19 11:41:42

标签: sql-server-2008 indexing

我在SQL Server 2008上运行此查询:

SELECT * 
FROM Dealers WITH (INDEX(0))
WHERE ID = 'rrsdsd'

但是执行计划显示它使用了表的聚集索引。

enter image description here

为什么会这样?

2 个答案:

答案 0 :(得分:2)

您所说的SQL Server不使用任何索引来执行查询。因此,我希望查询计划显示正在使用的聚簇索引(因为这是您的数据),但扫描正在完成而不是搜索。是这种情况吗?

根据文件:

如果存在聚簇索引,则INDEX(0)强制进行聚簇索引扫描,而INDEX(1)强制进行聚簇索引扫描或搜索。

这正是你所看到的。

答案 1 :(得分:2)

文档说明了一切......

  

INDEX(index_value [,... n])| INDEX =(index_value)INDEX()   syntax指定要使用的一个或多个索引的名称或ID   查询优化器在处理语句时。替代方案   INDEX =语法指定单个索引值。每个只有一个索引提示   表可以指定。

     

如果存在聚簇索引,则INDEX(0)强制进行聚簇索引扫描,而INDEX(1)强制进行聚簇索引扫描或搜索。如果不   存在聚簇索引,INDEX(0)强制进行表扫描而INDEX(1)为   被解释为错误。

     

如果在单个提示列表中使用多个索引,则重复项为   忽略,其余列出的索引用于检索   表的行。索引提示中索引的顺序是   重大。多索引提示也强制执行索引ANDing和   查询优化器在每个索引上应用尽可能多的条件   访问。如果暗示索引的集合不包括所有索引   查询引用的列,执行提取以检索   SQL Server数据库引擎检索全部后的剩余列   索引列。