我在 Postgresql 上发现了一个奇怪的问题,从一个 11 行的小表中检索最小值花费了近 200 毫秒。
初始化一条数据,关闭autovacuum并启动它。然后执行下面的sql。
create table test1(a int);
insert into test1 select generate_series(1, 10000000);
vacuum analyze test1;
create index on test1(a);
delete from test1 where a < 9999990;`
执行sql 从 test1 中选择 min(a); 从 test2 中选择 max(a);
上图显示花费了 197.443 ms 来获取最小值,但获取最大值只花费了 0.084 ms。他们都使用仅索引扫描。为什么他们在获得最小值和最大值之间有如此大的差异。我知道清理该表可以解决此性能问题,但我不知道原因。在我看来,仅索引扫描是最快的检索方法。这是不可思议的。期待有人能解释一下。先谢谢你了!
删除后只剩下11行。删除后您可能会立即采取的最短和最长时间?经过几次处决后,它会同时到来。但如果您有大量数据并执行最少次数,那么您会看到之间的时间差异 从 test11 中选择 min(a); 按限制 1 从 test11 订单中选择一个; 第二个要快得多。