SELECT, но замедляют операции записи (INSERT/UPDATE/DELETE) и занимают место на диске.
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, и помнить, что слишком много индексов может сделать систему медленнее.
Оцени свой прогресс