Sobes.tech
Back to questions
Senior
7

Индексирование в PostgreSQL: как создать индекс для запроса с несколькими параметрами? Почему индекс деградировал через полгода при активных обновлениях?

Companies where asked
plata

Answer from AI

sobes.tech AI

Для создания индекса в PostgreSQL, который ускорит запрос с несколькими параметрами (например, фильтрация по нескольким колонкам), используют составной индекс. Он создаётся так:

CREATE INDEX idx_name ON table_name (column1, column2, column3);

Важно учитывать порядок колонок в индексе: он должен соответствовать порядку использования в условиях WHERE для максимальной эффективности.

Причина деградации индекса при активных обновлениях — фрагментация и накопление "мертвых" записей (dead tuples). PostgreSQL использует MVCC, и при обновлениях старые версии строк не удаляются сразу, а остаются в таблице и индексе, что снижает производительность. Для решения проблемы нужно регулярно запускать VACUUM или VACUUM FULL, а также ANALYZE для обновления статистики. Автоматический autovacuum обычно справляется, но при очень интенсивных обновлениях может потребоваться настройка параметров или ручное вмешательство.