我在SQL Server 2008上运行此查询:
SELECT *
FROM Dealers WITH (INDEX(0))
WHERE ID = 'rrsdsd'
但是执行计划显示它使用了表的聚集索引。
为什么会这样?
答案 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数据库引擎检索全部后的剩余列 索引列。