如何获得详细的解释计划?

How to get Detailed Explain Plan?

我过去在管理工作室工作,记得 explain/query 计划是描述性的,就像它曾经告诉

1) 触发语句的顺序

2) 每个语句的行数 return

我正在使用 OracleSQL 开发人员 "explain plan",但我没有看到上述功能。还有其他好的免费工具吗?

Order in which statements will be fired

Adrian Billington has created an "XPlan Utility",以扩展 DBMS_XPLAN 的输出以包括步骤的执行顺序。以下输出显示默认输出与 Adrian 的 XPlan 实用程序生成的输出之间的差异。

例如,

EXPLAIN PLAN FOR
SELECT *
FROM   emp e, dept d
WHERE  e.deptno = d.deptno
AND    e.ename  = 'SMITH';

SET LINESIZE 130

-- Default Output
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------
Plan hash value: 3625962092

----------------------------------------------------------------------------------------
| Id  | Operation                    | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |         |     1 |    58 |     3   (0)| 00:00:53 |
|   1 |  NESTED LOOPS                |         |       |       |            |          |
|   2 |   NESTED LOOPS               |         |     1 |    58 |     3   (0)| 00:00:53 |
|*  3 |    TABLE ACCESS FULL         | EMP     |     1 |    38 |     2   (0)| 00:00:35 |
|*  4 |    INDEX UNIQUE SCAN         | PK_DEPT |     1 |       |     0   (0)| 00:00:01 |
|   5 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     1 |    20 |     1   (0)| 00:00:18 |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter("E"."ENAME"='SMITH')
   4 - access("E"."DEPTNO"="D"."DEPTNO")

18 rows selected.

SQL>

让我们看看扩展计划,看看步骤的顺序。请参阅 ORD 列:

-- XPlan Utility output
@xplan.display.sql

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
Plan hash value: 3625962092

----------------------------------------------------------------------------------------------------
| Id  | Pid | Ord | Operation                    | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------
|   0 |     |   6 | SELECT STATEMENT             |             |     1 |    58 |     3   (0)| 00:00:53 |
|   1 |   0 |   5 |  NESTED LOOPS                |             |       |       |            |          |
|   2 |   1 |   3 |   NESTED LOOPS               |             |     1 |    58 |     3   (0)| 00:00:53 |
|*  3 |   2 |   1 |    TABLE ACCESS FULL         | EMP         |     1 |    38 |     2   (0)| 00:00:35 |
|*  4 |   2 |   2 |    INDEX UNIQUE SCAN         | PK_DEPT     |     1 |       |     0   (0)| 00:00:01 |
|   5 |   1 |   4 |   TABLE ACCESS BY INDEX ROWID| DEPT        |     1 |    20 |     1   (0)| 00:00:18 |
----------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter("E"."ENAME"='SMITH')
   4 - access("E"."DEPTNO"="D"."DEPTNO")

About
------
  - XPlan v1.2 by Adrian Billington (http://www.oracle-developer.net)


18 rows selected.

SQL>

Number of rows return by each statement

SQL开发者中,解释计划window基数列 显示 行数

SQL*Plus中,使用DBMS_XPLAN,可以以可读格式显示。 行列显示行数

参见 How to create and display explain plan in SQL*Plus. Few good examples and usage here