我如何在Oracle Sql开发者中查看执行计划?

62

我有一些SQL查询性能非常低,我想检查这些查询的执行计划。我正在尝试执行下面的查询,但它没有显示任何查询执行计划。它只显示消息“计划FOR成功”。我不知道是否需要在Oracle SQL Developer中进行任何设置才能查看查询的解释计划:

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 );

1
您也可以使用dbForge Studio for Oracle中的SQL Profiler工具来完成此操作。请查看功能评估页面 - SQL Profiler - Devart
3个回答

106

EXPLAIN PLAN FOR

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

enter image description here

然后将在Explain Plan窗口中显示它。

如果您正在使用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>

查看如何创建并显示解释计划


7
记录一下,我发现用 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); 生成的输出结果比 SQL Developer 的执行计划窗口 更易读很多。 - jpmc26
@jpmc26 这取决于个人。我个人更喜欢使用命令行界面,但是我的经理喜欢使用类似的图形用户界面。 - Lalit Kumar B
3
我喜欢GUI,当它们能够很好地呈现信息时。我是说在这种情况下,GUI没有很好地呈现信息。 ;) - jpmc26
@jpmc26 是的,与市场上其他工具相比,它的GUI非常基础。 - Lalit Kumar B

10

Explain仅展示了优化器对查询的执行预测。

如果想要展示真实的执行计划,需要运行一次SQL语句,然后使用相同的会话运行以下内容:

@yoursql 
select * from table(dbms_xplan.display_cursor()) 

这种方法可以展示执行时使用的真实计划。使用 dbms_xplan 可以有其他几种展示计划的方式。您可以使用“dbms_xplan”进行谷歌搜索。


这对于PL/SQL有效吗? - Rick Henderson
打字错误。选择*从表(dbms_xplan.display_cursor())。 - Jostein Topland
@RickHenderson 搜索执行计划,它是有效的,你应该在运行查询之前使用它 :) - user3665906

1
我们使用Oracle PL/SQL开发者(版本12.0.7)。我们使用F5按钮来查看执行计划。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接