【发布时间】:2011-06-19 10:01:12
【问题描述】:
我有一个问题:
select min(timestamp) from table
这个表有 60+百万行,我每天都会删除一些。要确定是否有任何数据足够旧,请删除我运行上面的查询。时间戳升序有一个索引,只包含一列,oracle中的查询计划导致这是一次全索引扫描。这不应该是搜索的定义吗?
编辑包括计划:
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 2 | INDEX FULL SCAN (MIN/MAX)| NEVENTS_I2 | 1 | 8 | 4 (100)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 8 | | |
| 0 | SELECT STATEMENT | | 1 | 8 | 4 (0)| 00:00:01 |
【问题讨论】:
-
“全扫描”我假设您的意思是索引全扫描,而不是表扫描,对吗?
-
这么慢吗?您的响应时间是多少?
-
索引完整扫描实际上是没有上限或下限的范围扫描。该查询将仅扫描所需的行数。因此,虽然它说的是全扫描,但它实际上并不会读取索引的每个块。它从一端开始,只会向下读取到第一个叶子块,然后它就会完成。
标签: database performance oracle indexing