1、索引对不等号和NOT的限制
如果WHERE条件中出现!=或者<>,即使该列建立了索引,则该索引也不会被使用;如果不恰当的使用了NOT,则索引也不会被使用。
例子:select * from table t where id<> 123,这种写法不会使用索引,耗时多
select * from table t where id>123 or id<123 这种写法会调用索引,耗时少
select * from table t where not (id=123) 这种写法最优,耗时最少
结论:如果索引列是数字,则对于不等号的处理可以变更为NOT的方式或者(大于 OR 小于)的方式,但是如果索引是字符,对于NOT的写法也不会调用索引。
2、索引对IS NULL的限制
一般来说,如果WHERE子句基于的列是可空的列,且其建立了索引,如果使用了IS NULL,由于NULL的列本身不包含在索引中,因此无法利用索引。
所以一般对要建立索引的列不要设置为可空,如果确实含有空值,建议使用默认值代替空值,具体参见前面章节“sql优化技巧”部分的“使用默认值”。
3、索引对函数的限制
对该列在WHERE子句中使用了函数,则不能使用索引。因此,对在WHERE子句中经常要使用函数时,应该建立基于函数的索引,且只有当查询语句包含该函数或者表达式时,基于函数的索引才会被调用。详情请参见索引部分的理论讲解!
4、索引对不匹配数据类型的限制
原文链接:https://www.f2er.com/oracle/208808.html