哪类语句执行时索引不起作用呢。总结如下:
1. 索引字段进行判空查询时。也就是对索引字段判断是否为NULL时。语句为is null 或is not null。
比如:select * from SoftWareDetailInfo where CreateTime is null 此时就不检索time字段上的索引表了。也就是索引在这条语句执行时失效了。
接着再执行
select * from SoftWareDetailInfo where CreateTime = '2015-04-11 00:00:00' 此时就会检索索引表了。索引又起作用了。
2. 对索引字段进行like查询时。比如:select * from SoftWareDetailInfo where SoftUseLine like '%OQC%'。不过网上有的例子说like 'xx%'索引起作用。我没试过。
3. 判断索引列是否不等于某个值时。‘!=’操作符。比如:select * from SoftWareDetailInfo where SoftUseLine != 0
4. 对索引列进行运算。这里运算包括+-*/等运算。也包括使用函数。比如:
select * from SoftWareDetailInfo where SoftUseLine +0= 0
此时索引不起作用。
select * from SoftWareDetailInfo where count(SoftUseLine) = 0
此时索引也不起作用。
也就是说如果不是直接判断索引字段列,而是判断运算或其它函数处理后的索引列索引均不起作用。
5. 复合索引中的前导列没有被作为查询条件。比如:Index_SoftWareDetail索引包含(a,b,c) 三列,但是查询条件里面,没有a,b 列,只有c 列,那么 Index_SoftWareDetail索引也不起作用。