Про индексы спрашивают почти на каждом собеседовании, и первый вопрос обычно простой: «как индекс ускоряет запрос». Отвечают на него все. Отсеивает второй вопрос: «индекс есть, а запрос медленный, почему?» Как индекс устроен внутри, ты разобрал в уроке про B-дерево и хеш. Здесь мы тренируем ответ и собираем список случаев, когда индекс есть, а СУБД его не берёт.
Как спрашивают
Как индекс ускоряет запрос? Приведи примеры, когда индекс по колонке есть, а СУБД его не использует.
Часто следом: «Почему бы не повесить индекс на каждую колонку?»
Короткий ответ
Индекс это отсортированная структура рядом с таблицей, обычно B-дерево. По ней СУБД находит нужные строки за несколько шагов вместо чтения всей таблицы. Индекс не используется, когда условие нельзя перевести в поиск по отсортированным значениям: колонка обёрнута в функцию, LIKE начинается с %, условие на вторую колонку составного индекса без первой. Ещё индекс не берут, когда он не выгоден: таблица маленькая или условию подходит большая часть строк. И у каждого индекса есть цена: он замедляет запись и занимает место.
дальше после входа
Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.
Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.