Для равенства по 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 может уменьшить чтение таблицы, но увеличит хранение и стоимость изменений.