Oracle之SQL语句优化(第二篇)

前端之家收集整理的这篇文章主要介绍了Oracle之SQL语句优化(第二篇)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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、索引对不匹配数据类型的限制
因此在对其指定的值是数字时,Oracle虽然能隐式的执行数字和字符的转换,但不会调用其索引。而当对其指定是字符时,则不存在此问题,索引可以调用
注意:因为数据类型的不匹配和Oracle对数据类型的隐式转换,此种类型的低效代码在任何项目中均可能因为大意而存在,因此建议开发人员和管理人员要定期抽查相应的代码,以杜绝此类低效代码
原文链接:https://www.f2er.com/oracle/208808.html

猜你在找的Oracle相关文章