oracle sql 高级编程学习笔记(十七)

查看任何之前已经执行过的sql语句保存在库高速缓存中的执行计划,最简单方法就是使用dbms_xplan.display_curor函数
使用 gather_plan_statistics 提示 则在sql执行后,会在v$sql_plan_statistics_all视图中查到SQL的执行统计信息,例如逻辑读,物理读取次数,物理写入次数以及每一个运算在一行数据上的运行时间。 或者也可以将statistics_level 实例参数的值设置为all,抓取这些统计信息确实增加了语句执行成本,所以不必总是把这个功能打开。而hint提示仅仅是在使用的语句上生效。gather_plan_statistics提示会显示Starts E-row(期望返回行数) ,A_rows

select  /*+gather_plan_statistics*/ e.empno,e.ename from  emp  e where e.ename='KING';

set serveroutput off;
//serveroutput 如果是打开的,都会隐式的调用dbms_output 如果没有将 serveroutput 关闭
//那么最后执行的一条语句将会是dbms_output的调用.将不能返回所执行sql语句,而是试图给你
//dbms_output调用所使用的计划

 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST'));

oracle sql 高级编程学习笔记(十七)_第1张图片

不使用提示 显示统计信息

oracle sql 高级编程学习笔记(十七)_第2张图片
可以看到警告信息中表明如何获取统计信息。

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(null,null,'ALLSTATS LAST'));

还可以使用sql_id child_number取值

sql_id child_number 通过V$sql获得

select  t.SQL_TEXT,t.SQL_ID,t.CHILD_NUMBER from  v$sql t  where t.SQL_TEXT like '%gather_plan_statistics%';

oracle sql 高级编程学习笔记(十七)_第3张图片

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('692za5rczkx3w',0,'ALLSTATS LAST'));

同样也可以获得执行计划

oracle sql 高级编程学习笔记(十七)_第4张图片

你可能感兴趣的:(数据库,Oracle,sql高级编程学习笔记)