PRO

Что такое индекс? Зачем он нужен и когда замедляет работу?

Индекс в базе данных — это дополнительная структура данных (обычно дерево или хеш), которая ускоряет поиск по одному или нескольким столбцам, позволяя не сканировать всю таблицу. Индексы сильно ускоряют запросы SELECT, но замедляют операции записи (INSERT/UPDATE/DELETE) и занимают место на диске.
Подробный ответ

Что такое индекс

Индекс — это вспомогательная структура данных, которую СУБД строит по одному или нескольким столбцам таблицы. По сути, это «карта» или «оглавление», с помощью которого база может быстро найти нужные строки, не просматривая всю таблицу целиком.

Чаще всего под капотом используется B‑tree или другая структура, позволяющая быстро делать поиск по значению, диапазону и поддерживать упорядочивание.

Зачем он нужен

  • ускорить запросы SELECT с условиями по индексируемым полям (в выражениях WHERE, в соединениях JOIN, при сортировке ORDER BY, группировке GROUP BY);

  • поддерживать уникальность (уникальные индексы, первичные ключи PRIMARY KEY);

  • ускорить поиск по большим таблицам, когда полный скан (полное чтение) слишком дорогой.

Когда индекс замедляет работу

  • каждая операция INSERT/UPDATE/DELETE должна не только изменить строку в таблице, но и обновить все индексы, затронутые изменением;

  • чем больше индексов на таблице, тем дороже становятся массовые вставки и обновления данных;

  • индексы занимают дополнительное место на диске и в памяти;

  • если индекс создают по столбцу с низкой селективностью (например, по булевому полю) или по слишком «широкому» набору колонок, планировщик запросов может почти не использовать такой индекс, а обновлять его всё равно придётся.

Как ответить на собеседовании

Индекс — это дополнительная структура, которая ускоряет чтение (запросы SELECT), но удорожает запись (INSERT/UPDATE/DELETE). Его стоит добавлять под реальные запросы — по полям, которые часто используются в WHERE/JOIN/ORDER BY, и помнить, что слишком много индексов может сделать систему медленнее.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге