PostgreSQL: индексы, которые действительно работают
Индекс — это компромисс
Любой индекс ускоряет чтение, но замедляет запись и занимает место. Поэтому индексы добавляют не «на всякий случай», а под конкретные запросы, подтверждённые планом выполнения.
Читаем план запроса
EXPLAIN ANALYZE показывает, как именно база выполняет запрос: использует ли индекс, делает ли последовательное сканирование, сколько строк отбрасывает. Это главный инструмент диагностики медленных запросов.
На что смотреть в плане
- Seq Scan на большой таблице там, где ожидался индекс.
- Большая разница между оценкой и фактическим числом строк — устаревшая статистика.
- Дорогая сортировка, которую мог бы закрыть индекс.
Выбираем тип индекса
B-tree подходит для равенства и диапазонов и покрывает большинство случаев. GIN незаменим для JSONB и полнотекстового поиска. Частичные индексы экономят место, индексируя только нужное подмножество строк, а покрывающие индексы позволяют отвечать на запрос, не обращаясь к таблице.
Частые ошибки
Дублирующие индексы, индексы по столбцам с низкой селективностью и забытое обслуживание статистики — типичные причины того, что индексы не помогают. Регулярный анализ и пересмотр индексов под реальные запросы возвращают им пользу.
Итоги
Эффективное индексирование — это дисциплина измерений: смотрим план, добавляем точечный индекс, проверяем результат и удаляем то, что не приносит пользы.
Технологии
Теги
Руслан Исмаилов
Senior Web / Backend разработчик. Senior web/backend разработчик с 9-летним опытом. Стек: PHP, Laravel, PostgreSQL, Redis, Docker, Kubernetes, REST, микросервисы, CI/CD. Подробнее обо мне →