You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL分区表中简单聚合查询为何远慢于批量行查询?

分区表聚合查询首次执行性能异常问题

通常数据库聚合操作比将所有数据返回至应用端计算更快,但在AWS Aurora PostgreSQL的分区表场景下,仅单列AVG(volume)的简单聚合查询首次执行耗时15秒,而同WHERE子句的批量行查询(返回所有行)速度快一个数量级(约1秒)。首次执行聚合查询后数据被缓存,再次执行该查询的速度与批量行查询相当,仅首次运行存在速度差异。

测试查询语句

批量行查询

SELECT * FROM Sales
WHERE company = 191 
AND sale_date BETWEEN '10-01-2023' AND '10-31-2023'

聚合查询

SELECT AVG(volume) FROM Sales
WHERE company = 191 
AND sale_date BETWEEN '10-01-2023' AND '10-31-2023'

表结构与数据库环境

数据库为运行在AWS Aurora上的PostgreSQL,Sales表结构如下:

CREATE TABLE Sales (
    sale_date Timestamp(0) WITH TIME ZONE NOT NULL,
    company INTEGER NOT NULL,
    volume  SMALLINT NOT NULL
) PARTITION BY RANGE(sent_on);
CREATE INDEX ON Sales USING BTREE(company,sale_date);

执行计划分析

聚合查询执行计划

Aggregate (cost=109512.77..109512.78 rows=1 width=32)
Bitmap Heap Scan on sales_202310 sales  (cost=835.01..109440.13 rows=29054 width=30)
  Recheck Cond: ((company = 191) AND (sale_date >= '2023-10-01 00:00:00-04'::timestamp with time zone) AND (sale_date <= '2023-10-31 00:00:00-04'::timestamp with time zone))
  ->  Bitmap Index Scan on sales_202310_company_sale_date_idx  (cost=0.00..827.75 rows=29054 width=0)
        Index Cond: ((company = 191) AND (sale_date >= '2023-10-01 00:00:00-04'::timestamp with time zone) AND (sale_date <= '2023-10-31 00:00:00-04'::timestamp with time zone))

批量行查询执行计划

批量行查询的执行计划与聚合查询完全一致(成本也相同),仅缺少首行的Aggregate步骤。

内容的提问来源于stack exchange,提问作者Howlie_F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:38:21