Раздел 10 · Databases

Индексы: как ускоряют и когда не работают

junior~20 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Про индексы спрашивают почти на каждом собеседовании, и первый вопрос обычно простой: «как индекс ускоряет запрос». Отвечают на него все. Отсеивает второй вопрос: «индекс есть, а запрос медленный, почему?» Как индекс устроен внутри, ты разобрал в уроке про B-дерево и хеш. Здесь мы тренируем ответ и собираем список случаев, когда индекс есть, а СУБД его не берёт.

Как спрашивают

Как индекс ускоряет запрос? Приведи примеры, когда индекс по колонке есть, а СУБД его не использует.

Часто следом: «Почему бы не повесить индекс на каждую колонку?»

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

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

дальше после входа

Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.

Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.