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