大佬教程收集整理的这篇文章主要介绍了Oracle-SQL Explain Plan解读,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
执行计划:一条查询语句在Oracle中的执行过程或访问路径的描述。
基于OracLE的应用系统很多性能问题,是由应用系统sql性能低劣引起的,所以,sql的性能优化很重要,分析与优化sql的性能我们一般通过查看该sql的执行计划。
•不要实际执行sql语句,生成的计划未必是真实执行的计划
•必须要有plan_table
•除set autotrace traceonly explain外均实际执行sql,但仍未必是真实计划
•必须要有plan_table
•需要启用10046戒者sql_TRACE
•一般用tkprof看的更清楚些,当然10046里本身也有执行计划信息
.v$sql和v$sql_PLAN
•可以查询到多个子游标的计划信息了,但是看起来比较费劲
•可以图形化显示执行计划,但并非所有环境有EM可用
•注意 pl/sql developer之类工具F5看到的执行计划未必是真实的
以上大部分都未必是真实的SQL 执行计划,了解即可。
DBMS_XPLAN这个包最初是在oracle 9i R2中引入的,用来查看Explain Plan生成的执行计划。DBMS_XPLAN 在OraCLE 10g 以及OracLE 11g中,功能都有所增长。
https://docs.Oracle.com/cd/B28359_01/appdev.111/b28419/d_xplan.htm#CACFJGHG
http://docs.Oracle.com/cd/B19306_01/appdev.102/b14258/d_xplan.htm#CACFJGHG
在OraCLE 11g提供了下面5个函数的功能:
相比10g增加了 disPLAY_sql_PLAN_BASEliNE
disPLAY_sql_PLAN_BASEliNE - to display one or more execution plans for the sql statement IDentifIEd by sql handle
我们可以在DBMS_xplan这个包中看到 display_cursor的定义如下:
入参说明:
sql_ID:
cursor_child_no:
format:
disPLAY_cursOR函数,它显示存储在库缓存(library cache)中的实际执行计划,当然你要查询某个sql语句的实际执行计划,前提是这个sql的执行计划还在库缓存中,如果它已经被刷出库缓存,就无法获取其实际执行计划。
@H_502_123@执行方法SELEct * from table(DBMS_XPLAN.display_cursor(.....));
--执行sql
SELEct e.ename from emp e,DEPT d where e.deptno=d.deptno and e.empno=7499 ;
--获取sql_ID 9uz917qhd6dv0
SELEct * from v$sql a where a.sql_TEXT like '%SELEct e.ename from emp e,DEPT d where e.deptno=d.deptno%';
--说明:查询v$sql视图,找到该语句的sql_ID,有可能该sql语句不在Share Pool里面了,此时表明该sql已经被踢出Share Pool。
--查询执行计划
SELEct * from table(DBMS_XPLAN.display_cursor('9uz917qhd6dv0'));
--说明:不传递任何参数给display_cursor函数,表示显示当前会话最后一条sql语句的执行计划
以上是大佬教程为你收集整理的Oracle-SQL Explain Plan解读全部内容,希望文章能够帮你解决Oracle-SQL Explain Plan解读所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。