如何在Oracle Sql开发人员中查看解释计划?

And*_*rew 44 sql oracle oracle-sqldeveloper sql-execution-plan

我有几个SQL查询具有非常低的查询运行性能,我想检查此查询的查询执行计划.我试图执行以下查询,但它没有显示任何查询执行计划.它唯一的显示消息计划FOR成功.我不知道是否有任何设置我们必须在oracle sql开发人员中查找解释查询计划:

EXPLAIN PLAN FOR 
Select SO.P_OPTION_ID FROM
SIMSIM 
   JOIN P_TYPE PT on PT.KEY=SIM.P_TYPE_KEY JOIN P_CONFIG PC ON PC.ID=PT.PRODUCT_CONFIG_ID
JOIN P_OPTION PO ON PO.OPTION_KEY=PC.DEFAULT_PRODUCT_OPTIONS JOIN S_OPTION SO ON SO.SERVICE_ID=SIM.ASSIGNED_TO_SERVICE_ID
JOIN AVV_NO AN ON SIM.ASSIGNED_ANUMBER_ID = AN.ID
 where SO.STATUS_ID IN (20,40) 
 and SO.ID < to_char(SYSDATE - numtodsinterval (  1,'MINUTE' ), 'YYYYMMDDHH24MISS')||'0000'
 and SO.ID > to_char(SYSDATE - numtodsinterval (  1, 'HOUR' ), 'YYYYMMDDHH24MISS')||'0000'
and NOT EXISTS(SELECT ID from TEMP_BPL T WHERE T.ID = SO.ID );
Run Code Online (Sandbox Code Playgroud)

Lal*_*r B 76

解释计划

SQL Developer中,您不必使用EXPLAIN PLAN FOR语句.按F10或单击" 解释计划"图标.

在此输入图像描述

然后它将显示在" 解释计划"窗口中.

如果您使用的是SQL*Plus,请使用DBMS_XPLAN.

例如,

SQL> EXPLAIN PLAN FOR
  2  SELECT * FROM DUAL;

Explained.

SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

8 rows selected.

SQL>
Run Code Online (Sandbox Code Playgroud)

请参见如何创建和显示说明计划

  • 为了记录,我发现`SELECT*FROM TABLE(DBMS_XPLAN.DISPLAY);`产生*比SQL Developer的[解释计划窗口]更大的可读性输出(https://i.stack.imgur.com/dOMhm.png ). (3认同)
  • 我喜欢 GUI 能很好地呈现信息。我是说这种情况下的 GUI 不能很好地显示信息。;) (2认同)

小智 5

解释仅显示优化器如何认为查询将执行。

为了显示实际计划,您将需要运行一次sql。然后使用相同的会话运行以下命令:

@yoursql 
select * from table(dbms_xplan.display_cursor()) 
Run Code Online (Sandbox Code Playgroud)

这种方式可以显示执行期间使用的实际计划。还有其他几种使用dbms_xplan显示计划的方法。您可以使用带有“ dbms_xplan”一词的Google。