4

我遇到了在 Oracle 9i 中运行 select max 语句的机会,它运行得非常快。

select max(id) from audit_log; 

select min(id) from audit_log;

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

解释选择分钟的计划

解释 select max 的计划

4

2 回答 2

1

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

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

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

于 2011-06-06T16:41:28.277 回答
1

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

可能是您遇到了锁定问题。尝试更改隔离级别,看看是否会有所不同。

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

于 2011-06-06T20:34:00.997 回答