在SQL优化过程,有时候需要查看哪些SQL具有多个执行计划(Multiple Executions Plans for the same SQL statement),因为同一个SQL有多个执行计划一般意味着代码有问题或某些其它原因,例如,SQL语句使用绑定变量,但是绑定变量的类型或长度可能不一致会导致同一SQL出现不同执行计划。
SELECT SQL_ID, COUNT(1) AS PLAN_NUM FROM V$SQL GROUP BY SQL_ID HAVING COUNT(1) >=2 ORDER BY 2 DESC ; --根据具体的SQL_ID查看对应的SQL语句 SELECT * FROM V$SQL WHERE SQL_ID=:SQL_ID;
--查询SQL所有执行计划 SELECT * FROM TABLE(SYS.DBMS_XPLAN.DISPLAY_CURSOR('9x4fggs2mzu0m',null)) --查询SQL的CHILD NUMBER为0的执行计划 SELECT * FROM TABLE(SYS.DBMS_XPLAN.DISPLAY_CURSOR('9x4fggs2mzu0m',0)) --查询SQL的CHILD NUMBER为1的执行计划 SELECT * FROM TABLE(SYS.DBMS_XPLAN.DISPLAY_CURSOR('9x4fggs2mzu0m',1)) (责任编辑:IT) |