索引提示一般用来强制查询使用特定索引,或者强制使用索引的方式。
(1)使用特定的索引
有时候,发现一个查询很慢,然后创建了一个索引,照理,查询应该用这个索引,但实际执行的时候,执行计划却没有用到这个索引,怎么办呢?
首先,可以尝试更新下统计信息。
其次,如果更新完统计信息后,还是没用到索引,这种情况下,可以考虑强制使用索引提示。
使用方法:
select * from A where id with(index(A表的索引名称)) between 10000 and 10005
但在使用之前,一定要注意,如果以后这个索引删除了,而这个提示还是在sql中,就会导致sql报错。
(2)使用索引的方式
索引使用方式,包括:index seek(索引查找),index scan(索引扫描),针对聚集索引和非聚集索引,还可以进一步细分。
接着上面第1点,继续往下说。
如果用了上面的强制索引,照理应该用索引查找,但是生成的执行计划并不是index seek,而是索引扫描,导致执行速度还是很慢,咋办呢?
SQL Server 2008R2版本:
select * from A where id with(forceseek , index(A表的索引名称)) between 10000 and 10005
2012后的版本:
select * from A where id with( index(A表的索引名称),forceseek(索引名称(索引中的列))) between 10000 and 10005