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对数据类型的隐式转换,此种类型的低效代码在任何项目中均可能因为大意而存在,因此建议开发人员和管理人员要定期抽查相应的代码,以杜绝此类低效代码

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...