Step 1  学会阅读执行计划  (F5执行 F8 解释执行计划)

1.1  oracle有三种扫描方式:通过rowid值获取>>索引扫描(通过索引找rowid)>>全表扫描,

调查执行计划的第一步是理解对表的扫描方式,尽量避免不加任何条件的select *,这样无法避免全表扫描

尽量使用精准条件,尽可能使用索引键,使用索引键也要尽量避免or,like 等模糊查询的使用,因为这会导致全表扫描。

多使用 truncate而非delete,避免undo表空间的浪费,降低表的水位线,避免扫描过多无用的数据块。

不过delete支持rollback和where,truncate不支持,DML和DDL语句的性能差距还是很大的。

#解释执行计划
explain plan for select id from table where a=b

 

#使用rowid方法去重
delete from emp e where e.rowid>(select min(x.rowid)from emp x where x.empno=e.empno);

 

 

 

1.2 oracle解析生成执行计划的方式

oracle是自下而上的解析,因此where 条件的顺序需要注意,能过滤大量数据的条件后置。

oracle执行时会把语句转换为大写,因此可以使用大写编写脚本。

union all / union / minus  少用union因为会自动排序并去重,minus,not exists可以代替not in,