用Oracle解释计划

时间:2014-06-06 08:05:01

标签: oracle sql-execution-plan

我想看看Oracle中的执行计划。我试过这个:

select /*+ gather_plan_statistics */ /*test4*/ * from tag
where key='name';

SELECT t.*
FROM v$sql s, table(DBMS_XPLAN.DISPLAY_CURSOR(s.sql_id, s.child_number, 'TYPICAL PROJECTION')) t WHERE sql_text LIKE '%test4%';

结果是:

| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |       |       |    22 (100)|          |
|*  1 |  TABLE ACCESS FULL| TAG  |    14 |   714 |    22   (0)| 00:00:01 |

我的问题是行不正确,有3019行带键='名称'。 这是一个估计值。

我的问题是,我怎样才能获得真正的价值?

谢谢,安德烈

3 个答案:

答案 0 :(得分:2)

您应该使用此命令:

select * from table(dbms_xplan.display_cursor(format => 'ALLSTATS LAST'));

并查看输出中列E-RowsA-Rows之间的差异。

另见How do I know if the cardinality estimates in a plan are accurate?

答案 1 :(得分:1)

在SQL * Plus中,您可以使用AUTOTRACE功能。

有关示例,请参阅here

答案 2 :(得分:0)

这样做:

alter session set statistics_level=ALL;

然后运行:

select * from table( dbms_xplan.display_cursor( null, null, 'ALLSTATS LAST' ) );