今天用子查询时遇到了索引失效的问题,就把解决的过程和大家分享一下吧。。
先是用IN语句
select /*+ INDEX ( table [index [index]...] ) */ 字段A tableA where 字段b in(...)
查看执行计划,发现没有走索引。为什么?在网上一查看,一网友解释是用IN 时由于值不确定,所以不能走索引(IN OR 经常会使索引失效)。
改写SQL
select /*+ INDEX ( table [index [index]...] ) */ 字段A tableA ,tableB where exists(...)
查看执行计划,发现还是没有走索引。为什么?再一查看,发现原来我的where语句后有一个trunc()函数,而在WHERE后的列如何加了函数则索引会造成索引失效。。。。
问题找到了。。。