Postgres 的 SELECT DISTINCT 为何无法扩展?

Postgres SELECT DISTINCT Does Not Scale

Postgres 的 SELECT DISTINCT 为何无法扩展?

尽管 Postgres 常被推崇为全能数据库,但我们在处理分区队列工作负载时发现了一个反直觉的性能陷阱:SELECT DISTINCT 查询。即使建立了完美的索引,该查询依然会扫描所有匹配的行,导致性能随数据量线性下降,而非预期的按分区数量增长。本文基于 DBOS 团队的实战经验,深入剖析了 Postgres 内部设计导致这一问题的根本原因,并提供了切实可行的优化方案,帮助开发者避开这一隐蔽的性能瓶颈。

SELECT DISTINCT 是一个看似无害的条款,但其性能特征却出乎意料:无论你如何建立索引,也无论需要检索的唯一值有多少,它始终会扫描所有匹配其谓词的每一行。

同日更多故事

2026-09-26