> Какой индекс предложить для запроса с условиями по курсу студента и полу и почему (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Wildberries
Стек: Go
> Пример ответа
Для запроса с условиями по курсу студента и полу оптимальным будет составной индекс (composite index) на поля (course, gender).
Почему именно такой порядок полей?
-
Селективность (избирательность): Курс студента обычно имеет меньше уникальных значений (например, 1-6), чем пол (2 значения). Размещение более селективного поля (
course) первым позволяет базе данных максимально сузить набор строк на первом же шаге сканирования индекса. Если начать сgender, то после фильтрации по полу останется ~50% записей, которые затем придётся дополнительно фильтровать по курсу - это менее эффективно. -
Покрытие запроса: Если запрос содержит только эти два условия (например,
WHERE course = 3 AND gender = 'male'), индекс будет полностью покрывающим - все необходимые данные находятся в самом индексе, и не потребуется обращаться к таблице (index-only scan). Это значительно ускоряет выполнение. -
Сортировка: Если в запросе есть
ORDER BY course, индекс уже отсортирован по этому полю, что позволяет избежать дополнительной сортировки.
Пример в Go (с использованием GORM или raw SQL):
GO// GORMtype Student struct {gorm.ModelCourse int `gorm:"index:idx_course_gender"`Gender string `gorm:"index:idx_course_gender"`}// Raw SQL// CREATE INDEX idx_course_gender ON students (course, gender);
Альтернативный вариант: Если запросы часто фильтруют только по полу, можно добавить отдельный индекс на gender, но для комбинированного условия составной индекс всегда эффективнее двух отдельных.
> Похожие задачи по Go
Какой параметр использовать для партицирования, который не меняется со временем и помогает оптимизировать запрос
Как использовать hint parallel для ускорения запросов в Oracle
Что хотел бы поменять в профессии или работе
Чем должна отличаться новая компания от текущей
> Похожие задачи по backend
Какой параметр использовать для партицирования, который не меняется со временем и помогает оптимизировать запрос
Как использовать hint parallel для ускорения запросов в Oracle
Что хотел бы поменять в профессии или работе
Чем должна отличаться новая компания от текущей
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью