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'(有效)

 
posted @ 2022-02-20 19:23  bkyqzs  阅读(195)  评论(0)    收藏  举报