В архивном треде r/PostgreSQL автор отключил последовательное сканирование, чтобы база использовала индексы. По его замерам, запрос стал выполняться около 80 секунд вместо 18.
Индекс не обязан ускорять чтение всей таблицы. Иногда дешевле пройти страницы последовательно, чем читать индекс и затем доставать строки из таблицы. В обсуждении первоначальное объяснение про временные файлы даже пришлось исправить — хороший повод читать весь тред.
Сравнивайте планы на своей нагрузке через
EXPLAIN (ANALYZE, BUFFERS): оценки и фактические строки, время узлов и чтение страниц. Отключение Seq Scan годится для сравнения планов, но не как универсальная настройка ускорения.🔗 Разбор запроса и обсуждение
🐸 Библиотека программиста