Базы данных / SQL middle
Кейс: «навесили индексов на все поля — запись стала медленнее»?
Ответ
Каждый INSERT/UPDATE/DELETE обновляет ВСЕ индексы. 10 индексов = 10x overhead на запись. VACUUM тоже замедляется. REINDEX может понадобиться. Решение: индексы только по паттернам запросов (WHERE, JOIN, ORDER BY).
Разбор: Корень проблемы в том, что любой INSERT/UPDATE/DELETE должен синхронно поддерживать в актуальном состоянии каждый индекс таблицы, поэтому N индексов дают примерно N-кратный overhead на запись (плюс рост стоимости VACUUM/обслуживания). Индексы обновляются не лениво и не «выбираются планировщиком при вставке», а строки на странице данных не зависят от числа индексов; решение — оставить индексы только под реальные паттерны запросов (WHERE, JOIN, ORDER BY).
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.