Каки подводные камни есть в добавление индексов на большие таблицы
Python
Middle
Без компании
Каки подводные камни есть в добавление индексов на большие таблицы
Ответы
Добавление индексов на большие таблицы может вызвать несколько проблем:
- **Блокировка таблицы** – При создании индекса таблица может быть заблокирована для записи, что приведёт к простою сервиса. В PostgreSQL можно использовать `CONCURRENTLY`, но это медленнее:
```
CREATE INDEX CONCURRENTLY idx_name ON large_table(column);
```
- **Дисковое пространство** – Индексы занимают место, иногда сопоставимое с самой таблицей.
- **Производительность записи** – Каждая INSERT/UPDATE/DELETE требует обновления индексов, что замедляет операции записи.
- **Планировщик запросов** – Неоптимальные индексы могут сбить оптимизатор с толку, выбрав медленный план выполнения.
- **Фрагментация** – На часто изменяемых таблицах индексы фрагментируются, требуя регулярного `REINDEX`.
Лучшие практики:
- Добавлять индексы в периоды низкой нагрузки
- Тестировать влияние на производительность
- Использовать частичные индексы, если нужна только часть данных
- Мониторить использование индексов через `pg_stat_user_indexes`