Database 如何获得详细的解释计划?
我过去在management studio工作过,记得解释/查询计划是描述性的,就像它过去所说的那样 1) 激发语句的顺序 2) 每个语句返回的行数 我正在使用OracleSQL开发人员的“解释计划”,但我没有看到上述功能。还有其他好的免费工具吗? 激发语句的顺序 已创建“”以扩展DBMS_XPLAN的输出,以包括步骤的执行顺序。下面的输出显示了默认输出与Adrian的XPlan实用程序生成的输出之间的差异 比如说,Database 如何获得详细的解释计划?,database,oracle,performance,sql-execution-plan,Database,Oracle,Performance,Sql Execution Plan,我过去在management studio工作过,记得解释/查询计划是描述性的,就像它过去所说的那样 1) 激发语句的顺序 2) 每个语句返回的行数 我正在使用OracleSQL开发人员的“解释计划”,但我没有看到上述功能。还有其他好的免费工具吗? 激发语句的顺序 已创建“”以扩展DBMS_XPLAN的输出,以包括步骤的执行顺序。下面的输出显示了默认输出与Adrian的XPlan实用程序生成的输出之间的差异 比如说, EXPLAIN PLAN FOR SELECT * FROM emp e,
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>
让我们看看扩展计划,看看步骤的顺序。请参见“作战需求文件”列:
-- 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>
每个语句返回的行数
在SQL Developer中,解释计划窗口有基数列,该列显示了行数
在SQL*Plus中,使用DBMS\u XPLAN可以以可读格式显示。行列显示行数
看。很少有好的例子和用法。谢谢Lalit。我下载了该实用程序,但不确定如何获取上次执行语句的计划。我尝试的是:-解释Select*from的计划。。。。然后运行带有参数的xplan.display.sql(“PLAN_TABLE”,NULL,“典型”),以获取上次解释的sql语句的计划,当我从sqlplus运行
@xplan.display.sql
时,只需在sql*Plus中执行:@xplan.display.sql
,它表示错误:无法从计划中获取上次解释的计划_TABLE@emilly你确定吗?因为它对我有用。您是否可以执行SQL(无解释计划),然后运行@xplan.display.SQL
。如果您仍然面临这个问题,那么检查上一个SQL的语句\u id
,并将其作为参数传递给脚本。应该有用。如果打开脚本,在顶部有不同使用方法的示例。@Emily脚本是否也与SQL Developer一起工作?我是说,你是作为外部脚本运行的吗?不管怎样,我很高兴你让它工作了。