如何在PostgreSQL中增加执行MAX(id)聚合查询的速度?
我有一些与id相关的记录,可以在一秒内用COUNT()计算出来。
select count(id) as cnt from mytable where ref_id=2660
row cnt
1 2844
然而,当我尝试使用MAX()查找最新的记录ID时,查询需要近5分钟。
select max(id) as id from mytable where ref_id=2660
这很令人惊讶,因为我发现PG在处理更复杂的查询时非常快。为什么在处理相对较少的记录时会出现如此大的查询时间差异?如何才能最好地提高查询性能?
编辑:这是上述MAX()选择的查询计划:
"Result (cost=219.84..219.85 rows=1 width=0)"
" InitPlan 1 (returns $0)"
" -> Limit (cost=0.00..219.84 rows=1 width=4)"
" -> Index Scan Backward using mytable_pkey on mytable (cost=0.00..773828.42 rows=3520 width=4)"
" Filter: ((id IS NOT NULL) AND (ref_id = 2660))"