SELECT DISTINCT в Postgres не масштабируется

Postgres SELECT DISTINCT Does Not Scale

SELECT DISTINCT в Postgres не масштабируется

Питер Крафт из DBOS разбирает неожиданную проблему: SELECT DISTINCT всегда сканирует все строки, подходящие под условия, независимо от индексов и количества уникальных значений. На примере очередей с партиционированием он показывает, как этот запрос стал самым дорогим, и объясняет, какие решения в Postgres делают его медленным и как это обойти.

SELECT DISTINCT — безобидный на вид оператор, который находит все уникальные значения столбца. Однако его производительность не такая, как можно ожидать: как бы вы ни индексировали таблицу, как бы мало уникальных значений ни требовалось получить, SELECT DISTINCT всегда будет сканировать каждую строку, подходящую под его предикаты.

Ещё за этот день

2026-09-26