1

我想在执行查询之前评估查询的行数和执行时间。是否可以?

4

1 回答 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 秒。Timeid = 2COUNT(*)id = 1id = 0SELECT

于 2012-10-24T17:47:47.923 回答