加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

提高PostgreSQL聚合性能

发布时间:2020-12-13 18:10:43 所属栏目:百科 来源:网络整理
导读:在PostgreSQL中执行MAX(id)聚合的提高查询速度的最佳方法是什么? 我有一个与id相关的适度数量的记录,我可以在一秒钟内COUNT(),例如 select count(id) as cnt from mytable where ref_id=2660row cnt1 2844 但是,当我尝试使用MAX()查找最新的记录ID时,查询需
在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))"
我google了一下,看起来像PostgreSQL(高达8.4)不喜欢MAX和MIN,它会对表进行顺序扫描以获得结果.没有查询计划和版本,很难说这是你的情况.

您可以尝试此解决方法.

SELECT id from mytable WHERE ref_id=2660 ORDER BY id DESC LIMIT 1

编辑:确保您有一个索引(ref_id,id),否则表扫描/排序是不可避免的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读