> Какой индекс построить для запроса с условиями на несколько столбцов (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Ozon
Стек: Go
> Пример ответа
Для запроса с условиями на несколько столбцов в Go (и в SQL в целом) оптимальным решением будет композитный (составной) индекс. Он создаётся на все столбцы, участвующие в условиях WHERE, в определённом порядке.
Правило выбора порядка столбцов:
- Сначала столбцы с условиями равенства (
=) - они обеспечивают максимальную селективность. - Затем столбцы с условиями диапазона (
>,<,BETWEEN,LIKEбез ведущего wildcard). - В конце - столбцы для сортировки (
ORDER BY).
Пример для Go-приложения (PostgreSQL):
Допустим, есть таблица orders и частый запрос:
SQLSELECT * FROM orders WHERE user_id = 123 AND status = 'active' AND created_at > '2024-01-01';
Индекс:
SQLCREATE INDEX idx_orders_user_status_date ON orders (user_id, status, created_at);
Здесь user_id и status - равенство, created_at - диапазон.
Важно:
- Если в запросе есть
OR, композитный индекс может не использоваться - тогда рассмотрите отдельные индексы илиUNION. - Для Go-приложений с ORM (например, GORM) убедитесь, что индексы явно объявлены через миграции, а не полагайтесь на авто-создание.
- Используйте
EXPLAIN ANALYZEдля проверки плана выполнения.
Альтернатива: Если столбцы часто меняются в условиях, можно построить несколько отдельных индексов - СУБД может комбинировать их через Bitmap Scan (в PostgreSQL), но это менее эффективно, чем один композитный.
> Похожие задачи по Go
Как модифицировать архитектуру микросервиса, чтобы обеспечить надежность обработки заказов при падении аналитического сервиса
Как написать запрос, который выберет названия всех книг с более чем тремя авторами
Что происходит при обновлении нескольких строк в одном запросе в базе данных
Как понять, что код отработал правильно
> Похожие задачи по backend
Как модифицировать архитектуру микросервиса, чтобы обеспечить надежность обработки заказов при падении аналитического сервиса
Как написать запрос, который выберет названия всех книг с более чем тремя авторами
Что происходит при обновлении нескольких строк в одном запросе в базе данных
Как понять, что код отработал правильно
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью