我想在执行 之前查询的行数和执行时间。有可能吗?
答案 0 :(得分:4)
查询计划可以显示优化程序估计将返回(或修改)的行数以及优化程序估计查询运行的时间。因为这些估计与表格的统计数据有关,然而,它们完全可能是非常不正确的。
如果我采用简单的查询,
SQL> explain plan for select count(*) from emp where deptno = 10;
Explained.
SQL> select *
2 from table( dbms_xplan.display );
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2083865914
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 3 | 3 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 3 | | |
|* 2 | TABLE ACCESS FULL| EMP | 3 | 9 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------
Predicate Information (identified by operation id):
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
2 - filter("DEPTNO"=10)
14 rows selected.
Oracle希望对EMP
表进行全表扫描,过滤掉deptno = 10
将返回3行且需要1秒的行(Rows
和Time
具有id = 2
的行的查询计划中的列。 Oracle期望COUNT(*)
行上的id = 1
聚合将其减少到1行。因此,在id = 0
的行上,Oracle期望SELECT
语句返回1行并运行1秒。