【发布时间】:2011-05-12 01:19:32
【问题描述】:
我是 Oracle 11g 的新手,我有一个关于执行计划的问题。我运行了一个查询,即使查询中没有 ORDER BY 子句,执行计划的统计信息仍然显示内存中有 6 个排序。谁能向我解释为什么会这样?以下是查询和统计信息:
SQL> SELECT ZIP FROM NOZIPSORT WHERE ZIP BETWEEN '10000' AND '29999' AND rownum < 26;
25 rows selected.
Elapsed: 00:00:00.07
Execution Plan
----------------------------------------------------------
Plan hash value: 4176934817
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 25 | 150 | 2 (0)| 00:00:01 |
|* 1 | COUNT STOPKEY | | | | | |
|* 2 | TABLE ACCESS FULL| NOZIPSORT | 28 | 168 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(ROWNUM<26)
2 - filter("ZIP"<='29999' AND "ZIP">='10000')
Statistics
----------------------------------------------------------
311 recursive calls
0 db block gets
47 consistent gets
38 physical reads
520 redo size
805 bytes sent via SQL*Net to client
431 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
6 sorts (memory)
0 sorts (disk)
25 rows processed
【问题讨论】:
-
请注意,“统计”与“执行计划”本身无关——它们是查询本身执行的实际统计。再次运行它,你可能每次看到不同的统计数据,即使执行计划保持不变。
标签: database oracle sorting sql-order-by sql-execution-plan