Определение наилучших индексов для повышения производительности SQL‑запросов

Для AND подходит составной B-tree индекс по имени и фамилии. Для OR обычно нужны индексы с каждым из полей первым; один (lastName, firstName) не гарантирует быстрый поиск по одному firstName.

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

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

Для AND подходит составной B-tree индекс по имени и фамилии. Для OR обычно нужны индексы с каждым из полей первым; один (lastName, firstName) не гарантирует быстрый поиск по одному firstName.

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

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

Условие

В системе есть запрос, который работает без использования индексов. Необходимо предложить оптимальный индекс (или набор индексов), который максимально ускорит выполнение данного запроса.

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

(lastName, firstName)

Ответ

Для AND подходит составной B-tree индекс по имени и фамилии. Для OR обычно нужны индексы с каждым из полей первым; один (lastName, firstName) не гарантирует быстрый поиск по одному firstName.

Когда оба условия — равенства, оба порядка составного ключа могут работать; выбор зависит и от других запросов. Для OR оптимизатор может объединить отдельные индексные выборки, но при низкой селективности предпочтёт сканирование. Проверьте EXPLAIN на реальных данных. Добавление email и role ради покрытия увеличивает индекс и стоимость записи, поэтому не является обязательным улучшением.

Источник: dev.mysql.com.

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

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

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

Подробнее