索引我们在SQL中是经常用到的,使用索引可以快速访问到数据库中的信息,是我们优化SQL查询速度最常用也是最有效的方法。
但我们创建了索引后,是不是所有Select语句都会用到索引呢?答案是NO,不好的SQL语句的写法往往会使SQL引擎无法使用索引,从而失去了查询速度上的优势。
下面列出无法使用索引的几种情况,以供大家参考:
(1)对索引列使用了函数或计算
假如表table1的索引列是id,但如下语句会使索引无效
select * from table1 where dbo.fn_fun(id)='xxx'
(2)对索引列使用了Like ‘%X’或Like ‘%X%’
引用上面的表,如下语句也会使索引无效
select * from table1 where id like '%xx%'
(3)在组合索引的第1列不是使用最多的列
(4)在where子句中使用了In(子查询)
如下语句会使索引无效
select * from table1 where id in (select id from table2)
(5)数据类型转换将导致不能利用索引
如下语句会使索引无效
select * from table1 where cast(id as varchar(50))='xxx'
(6)负向比较将导致不能利用索引
如下语句会使索引无效
select * from table1 where 'xxx'=id
以上为小编的个人经验,希望能给大家带来帮助。