导致索引失效是开发人员经常犯的错误之一。在SQL中有很多陷阱会使一些索引无法使用。我们来看看那些情况下会使索引失效
1.使用不等于操作符(<>、!=)
测试用的表数据
[img]http://dl.iteye.com/upload/attachment/0069/4519/6f35477f-1701-39c2-a8a4-11bdbdb82e2a.jpg[/img]
查看使用不等于的执行计划
[img]http://dl.iteye.com/upload/attachment/0069/4523/8f9b47a7-e733-3253-8c83-32108eb6c922.jpg[/img]
而使用or的执行计划
[img]http://dl.iteye.com/upload/attachment/0069/4525/55cbd5be-b05a-37bc-b713-cb95045fc388.jpg[/img]
可以看出在使用不等于时会使索引失效,通过把不等于操作符改成OR条件,就可以使用索引,以避免全表扫描
2.使用IS NULL 或IS NOT NULL
使用IS NULL 或IS NOT NULL也会限制索引的使用。
1.使用不等于操作符(<>、!=)
测试用的表数据
[img]http://dl.iteye.com/upload/attachment/0069/4519/6f35477f-1701-39c2-a8a4-11bdbdb82e2a.jpg[/img]
查看使用不等于的执行计划
[img]http://dl.iteye.com/upload/attachment/0069/4523/8f9b47a7-e733-3253-8c83-32108eb6c922.jpg[/img]
而使用or的执行计划
[img]http://dl.iteye.com/upload/attachment/0069/4525/55cbd5be-b05a-37bc-b713-cb95045fc388.jpg[/img]
可以看出在使用不等于时会使索引失效,通过把不等于操作符改成OR条件,就可以使用索引,以避免全表扫描
2.使用IS NULL 或IS NOT NULL
使用IS NULL 或IS NOT NULL也会限制索引的使用。