我想在执行查询之前评估查询的行数和执行时间。是否可以?
问问题
230 次
1 回答
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
和列)。Oracle 期望行上的聚合将其减少到 1 行。因此,在带有 的行上,Oracle 期望语句返回 1 行并运行 1 秒。Time
id = 2
COUNT(*)
id = 1
id = 0
SELECT
于 2012-10-24T17:47:47.923 回答