我遇到了在Oracle 9i中运行select max语句的机会,并且运行速度非常快。
select max(id) from audit_log;
select min(id) from audit_log;
但是,当运行select min时,查询似乎挂起并且永远不会返回。该表包含审计日志和几亿条记录。
答案 0 :(得分:1)
一个可能的原因是列ID 确实有索引,但可以为空。在这种情况下,ID为null 的行不会在索引中。因此min()不能在可空列上使用索引。
...所以你很可能只需要alter table audit_log modify id not null;
或者您可以在ID后面创建一个非空列的新复合索引。这也应该有效,因为每一行都有一个条目。
答案 1 :(得分:1)
可能是你的最大值在内存中。如果它快速递增,它可能一直在内存中。如果没有人访问最小值,则必须检索它。
可能是您遇到了锁定问题。尝试更改隔离级别,看看是否会产生影响。
可能是您的索引已损坏。尝试重建它。