SQL优化 第二章 执行计划

参考资料:
本系列博客主要参考资料有CUUG冉乃纲老师数据库教学笔记,《SQL优化核心思想》(罗炳森,黄超,钟侥著),《PostgreSQL技术内幕:查询优化深度探索》(张树杰著),排名不分先后。

 

执行计划就是SQL执行的步骤,因为我们写的SQL不一定就是按照我们写的执行,数据库优化器会根据统计信息(统计信息后面讲解)进行SQL改写(SQL改写后面讲解),生成执行计划,但是下面三种执行计划,作为基本,要掌握。

另外,一般获取执行计划时至少执行两次,以固定执行计划(因为优化器自己也会自己进化执行计划,达到性能优化目的)及消除物理读。

物理读:从磁盘读取数据

逻辑读:从内存读取数据

 

1 获取真实执行计划

Alter session set statistics_level=all;    

Select * from table(dbms_xplan.display_cursor(null,null,'allstats last')) ;

例子:

Alter session set statistics_level=all;

select * from emp;

Select * from table(dbms_xplan.display_cursor(null,null,'allstats last')) ;

 

A-Rows(实际返回行数)是这种获取方式独有的,也是超级具有参考价值的

E-Rows(估算返回行数)和A-Rows的比较很重要,当相差很大时,我们有时候要更改执行计划。

2 set autotrace on/off/traceonly

这个是根据统计信息拿到估算的执行计划。

set autotrace on;

select * from emp;

逻辑读总计(consistent gets),物理读总计(physical reads),递归调用次数(recursive calls)可以方便看到。

3 EXPLAIN PLAN

当某个性能SQL死掉,不出结果时,我们可以用这个,这个肯定是估算的执行计划,但是没有办法,我们只能先参考这个进行优化。

EXPLAIN PLAN FOR select * from emp;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

超级简单的执行计划,在不出结果时初步参考使用,属于无奈之举。

4 关于执行计划入口选择

执行计划的入口选在很重要,我们要知道执行计划从哪里开始的,执行计划阅读方法请自行网上搜索<光标移动大法>,这是一个比较好用的办法。

猜你喜欢

转载自blog.csdn.net/songjian1104/article/details/91349922