oracle查询性能优化
1.WHERE子句中的连接顺序
ORACLE采用自下而上的顺序解析,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾,尤其是“主键ID=?”这样的条件
2.SELECT子句中避免使用 ‘ * ‘
ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。对于查询语句,由于全表扫描读取的数据多,尤其是对于大型表不仅查询速度慢,而且对磁盘IO造成大的压力,通常都要避免,而避免的方式通常是使用索引Index
3.避免在索引列上使用NOT
当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描
4.避免在索引列上使用计算
WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描. 举例:
低效:SELECT … FROM DEPT WHERE SAL * 12 > 25000;
高效:SELECT … FROM DEPT WHERE SAL > 25000/12;
5.避免在索引列上使用IS NULL和IS NOT NULL
低效:(索引失效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL; 高效:(索引有效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0;
6.注意通配符%的影响
使用通配符的情况下Oracle可能会停用该索引。如 :
SELECT…FROM DEPARTMENT WHERE DEPT_CODE like ‘%123456%'(无效)。
SELECT…FROM DEPARTMENT WHERE DEPT_CODE = ‘123456'(有效)

浙公网安备 33010602011771号