导致SQL Server索引不可用的几种Sql语句写法

发布时间:2020-09-18编辑:脚本学堂
本文介绍下,哪些sql写法可以导致sql server索引的不可使用,即创建的索引在某些类型的sql语句中是无效的。有需要的朋友参考下吧。

在sql server中,使用索引可以快速访问到数据库中的信息,这也是优化SQL查询速度最常用也是最有效的方法。

创建了索引后,是不是所有Select语句都会用到索引呢?
当然不是了,不好的sql语句的写法往往会使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

一点小经验,总结一下,分享出来,供大家参考。
在以后遇到sql server索引时,记得留意这些问题哦。