为什么从表中选择max(字段)的速度与从表Oracle9i中选择min(字段)相比要快得多

时间:2011-06-06 10:44:06

标签: oracle select max oracle9i min

我遇到了在Oracle 9i中运行select max语句的机会,并且运行速度非常快。

select max(id) from audit_log; 

select min(id) from audit_log;

但是,当运行select min时,查询似乎挂起并且永远不会返回。该表包含审计日志和几亿条记录。

Explain plan for select min

Explain plan for select max

2 个答案:

答案 0 :(得分:1)

一个可能的原因是列ID 确实有索引,但可以为空。在这种情况下,ID为null 的行不会在索引中。因此min()不能在可空列上使用索引。

...所以你很可能只需要alter table audit_log modify id not null;

或者您可以在ID后面创建一个非空列的新复合索引。这也应该有效,因为每一行都有一个条目。

答案 1 :(得分:1)

可能是你的最大值在内存中。如果它快速递增,它可能一直在内存中。如果没有人访问最小值,则必须检索它。

可能是您遇到了锁定问题。尝试更改隔离级别,看看是否会产生影响。

可能是您的索引已损坏。尝试重建它。