Индексы в PostgreSQL: когда они реально помогают, а когда мешают

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
10,088
Реакции
1,570
Credits
36,046
Индексы в PostgreSQL: когда они реально помогают, а когда мешают
Многие ставят индексы “на всё подряд”, а потом удивляются, почему БД тормозит.

Типичные ошибки:
- Индекс на колонке, которая почти всегда уникальна (например, id с PK — он уже индексирован).
- Индекс на поле с низкой селективностью (is_active = true/false) — толку ноль, только замедляет вставки.
- Создание 5+ индексов на таблицу без анализа запросов.

Best practices:
- Делайте индекс под конкретный частый запрос.
- Для WHERE field LIKE 'abc%' — используйте btree.
- Для поиска по JSONB → GIN индекс.
- Для геоданных → GiST.
- Для частого условия — partial index:
SQL:
CREATE INDEX idx_orders_active 
ON orders(status) 
WHERE status = 'active';

Помните: каждый индекс ускоряет SELECT, но замедляет INSERT/UPDATE/DELETE.
Итог: индекс — это инструмент, а не магическая таблетка. Всегда проверяйте план выполнения (EXPLAIN ANALYZE).