> Что делать если EXPLAIN показывает sequential scan вместо индексного сканирования (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Ютека

Стек: Go

> Пример ответа

Если EXPLAIN показывает sequential scan вместо индексного, первым делом проверяем, существует ли подходящий индекс для условий запроса. В Go-проектах это часто упускают при миграциях. Затем смотрим на селективность: если запрос выбирает >10–20% строк, PostgreSQL может посчитать sequential scan дешевле из-за накладных расходов на чтение индекса и random I/O. В таком случае помогает SET enable_seqscan = off для теста - если план меняется на индексный, проблема в статистике или селективности. Обновите статистику через ANALYZE и проверьте, не устарела ли она после массовых вставок. Также убедитесь, что типы данных в условиях совпадают с типом индексированного столбца (например, VARCHAR vs TEXT). В Go при использовании ORM вроде GORM или sqlx следите, чтобы параметры передавались с правильными типами. Если индекс есть, но не используется, попробуйте переписать запрос: избегайте оборачивания столбцов в функции (WHERE LOWER(name) = 'foo'), используйте составные индексы для условий с несколькими полями. В крайнем случае - pg_hint_plan или ручное управление планом, но это редкость.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью