sql语句优化 技巧

优化SQL的一些小常识。
1)不知大家是否喜欢使用not in这样的操作,如果是,那尽量使用(not) exists替代
例子:

语句1:
select dname,deptno 
from dept 
where deptno not in (select deptno from emp);

语句2:
select dname,deptno 
from dept 
where not exists (select deptno from emp where dept.deptno=emp.deptno);
 


明显的,2要比1的执行性能好很多
因为1中对emp进行了full table scan,这是很浪费时间的操作。而且1中没有用到emp的
index,
因为没有where子句。而2中的语句对emp进行的是range scan。

2)在海量查询时尽量少用格式转换。
如用

where a.order_no=b.order_no
而不用
where to_number (substr(a.order_no, instr(b.order_no, '.') - 1)=to_number 
(substr(a.order_no, instr(b.order_no, '.') - 1)


 
3)查询海量数据是,可以使用optimizer hints,例如/*+ORDERED */

select /*+full(emp)*/ e.ename
from emp e
where e.job='clerk';
而不是
select e.ename
from emp e
where e.job || ''='clerk'
 

 

你可能感兴趣的:(sql)