> Почему запрос с индексами может тормозить и как это решать (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: sferaplatform.ru
Стек: Go
> Пример ответа
Даже при наличии индексов запрос может тормозить по нескольким причинам. Основные из них:
-
Неоптимальный план запроса - оптимизатор БД может выбрать неправильный индекс из-за устаревшей статистики. Решение: выполнить
ANALYZEдля обновления статистики и проверить план черезEXPLAIN ANALYZE. -
Index Scan вместо Index Only Scan - если запрос выбирает столбцы, не входящие в индекс, БД вынуждена обращаться к таблице (Heap Lookup). Решение: создать покрывающий индекс (covering index), включив все нужные поля в
INCLUDE. -
Низкая селективность индекса - индекс на столбце с множеством дубликатов (например,
statusс 2 значениями) неэффективен. Решение: пересмотреть композитный индекс или использовать частичные индексы (WHERE status = 'active'). -
Сортировка и группировка - если индекс не покрывает
ORDER BYилиGROUP BY, БД выполняет дополнительную сортировку. Решение: добавить столбцы сортировки в индекс в правильном порядке. -
Bloat индекса - после массовых обновлений/удалений индекс становится фрагментированным. Решение: перестроить индекс (
REINDEXв PostgreSQL,ALTER INDEX ... REBUILDв SQL Server). -
Неверный порядок столбцов в композитном индексе - если условие
WHEREне начинается с первого столбца индекса, индекс может не использоваться. Решение: размещать столбцы с высокой селективностью первыми.
В Go-приложении полезно логировать медленные запросы (через database/sql с таймаутами) и анализировать их через EXPLAIN ANALYZE. Также стоит избегать N+1 запросов в ORM-подобных паттернах - используйте JOIN или batch-загрузку.
> Похожие задачи по backend
Почему Kafka такая быстрая
Почему Pulsar не может достичь такого же уровня масштабируемости как Kafka
Как бороться с большими объемами данных в запросах, например шардирование
Как устроена пагинация в Go проектах
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью