> Что такое селективность индекса и почему не всегда индекс используется? (Go)
Уровень: junior · Роль: backend · Категория: Технические вопросы
Компании: Сбер, Employcity
Стек: Go
> Пример ответа
Селективность индекса - это мера того, насколько эффективно индекс сужает область поиска. Она определяется как отношение числа уникальных значений в индексированном столбце к общему количеству строк в таблице. Чем выше селективность (ближе к 1), тем меньше строк приходится сканировать после применения индекса. Например, индекс по столбцу id (уникальные значения) имеет селективность 1, а по столбцу is_deleted (всего два значения) - низкую.
Индекс не всегда используется, даже если он существует, по нескольким причинам:
-
Низкая селективность: Если индекс возвращает слишком много строк (например, >20-30% таблицы), оптимизатору выгоднее выполнить полное сканирование (full scan), так как чтение страниц индекса плюс последующие случайные обращения к данным (lookups) дороже последовательного чтения.
-
Тип запроса: При использовании функций над столбцом (например,
WHERE YEAR(date) = 2023) или неявных преобразований типов индекс может быть проигнорирован. -
Статистика устарела: Оптимизатор опирается на статистику распределения данных. Если она не обновлена, он может ошибочно отказаться от индекса.
-
Покрытие запроса: Если запрос требует выборки многих столбцов, не входящих в индекс, и при этом селективность низкая, оптимизатор предпочтёт full scan, чтобы избежать множественных random I/O.
В Go, при работе с базами данных (например, через database/sql или ORM вроде GORM), важно понимать эти аспекты для написания эффективных запросов и проектирования индексов, особенно в высоконагруженных системах.
> Похожие задачи по backend
Что происходит в программе при отсутствии доступной памяти
Как реализовать паттерн fan-out fan-in в Go с использованием горутин?
Что происходит с внешним сервисом при повторных обращениях во время сбоя
Как происходит обмен сертификатами в HTTPS
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью