PostgreSQL может избежать полной сортировки таблицы при ORDER BY ... LIMIT! — 27 мая 2026 г. в 15:28:45.882
PostgreSQL может избежать полной сортировки таблицы при ORDER BY ... LIMIT! Большинство думает, что ORDER BY всегда сортирует вообще всю таблицу. Но в PostgreSQL для LIMIT есть отдельная оптимизация — Top-N Heap Sort. SELECT * FROM orders ORDER BY created_at DESC LIMIT 10; Если нужен только top-10 результат, PostgreSQL не обязан сортировать миллионы строк полностью. Вместо этого он держит в памяти только N лучших строк во время scan. Это видно прямо в execution plan: Sort Method: top-N heapsort Особенно интересно становится на огромных таблицах, где полный sort мог бы уйти на диск: SET work_mem = '4MB'; EXPLAIN ANALYZE SELECT * FROM events ORDER BY created_at DESC LIMIT 50; Даже при маленьком work_mem PostgreSQL может избежать полной сортировки всех строк и работать заметно быстрее именно благодаря оптимизации Top-N. А если добавить подходящий индекс: CREATE INDEX idx_events_created_at ON events (created_at DESC); PostgreSQL вообще сможет обойтись без Sort и просто сделать Index Scan в нужном порядке. SQL Ready | #совет

