Эффективный подбор индекса для запросов к крупной таблице

Для равенства по firstName и lastName начните с составного B-tree индекса по этим двум полям. Лучший порядок выбирают с учётом остальных запросов, а пользу подтверждают планом выполнения.

Короткий ответ

Что ответить на собеседовании

Для равенства по firstName и lastName начните с составного B-tree индекса по этим двум полям. Лучший порядок выбирают с учётом остальных запросов, а пользу подтверждают планом выполнения.

Подробный разбор

Ответ с пояснениями

Условие

В базе существует таблица User, содержащая около 10 млн записей, при этом в ней отсутствуют индексы. Требуется предложить оптимальный индекс (или набор индексов), который позволит ускорить выполнение следующего запроса.

SELECT email, firstName, lastName, role
FROM User
WHERE firstName = ? AND lastName = ?;

Ответ

Для равенства по firstName и lastName начните с составного B-tree индекса по этим двум полям. Лучший порядок выбирают с учётом остальных запросов, а пользу подтверждают планом выполнения.

При двух равенствах подходят оба порядка: (firstName, lastName) и (lastName, firstName). Если часто ищут только по фамилии, логичен второй. Сам размер 10 млн строк не доказывает ускорение: важны селективность, статистика и число возвращаемых строк. Покрывающий индекс с email и role может уменьшить чтение таблицы, но увеличит хранение и стоимость изменений.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее