Какие виды индексов существуют?
Answer from AI
sobes.tech AI
Что хотят услышать интервьюеры:
Индексы бывают разных типов, и каждый оптимизирует поиск под свой сценарий: точные совпадения, диапазоны, сортировку, полнотекстовый поиск. Важно понимать не только названия, но и когда индекс помогает, а когда мешает из-за накладных расходов на запись. Хороший ответ — это умение сопоставить тип индекса с типом запроса и структурой данных.
Определение:
Индекс в базе данных — это вспомогательная структура данных, которая ускоряет поиск и сортировку строк в таблице. Разные виды индексов отличаются тем, как они устроены и для каких запросов подходят лучше всего. Обычно выделяют кластерные и некластерные индексы, а также специализированные варианты: уникальные, составные, полнотекстовые, пространственные, хэш-индексы и другие в зависимости от СУБД.
Пример использования:
Если часто ищут пользователя по email, имеет смысл создать индекс по этому полю. Если запросы фильтруют данные по нескольким колонкам, например по UserId и CreatedAt, можно использовать составной индекс. Для текстового поиска по описаниям товаров лучше подходит полнотекстовый индекс.
-- Уникальный индекс для email
CREATE UNIQUE INDEX IX_Users_Email ON Users (Email);
-- Составной индекс для частых фильтров
CREATE INDEX IX_Orders_UserId_CreatedAt ON Orders (UserId, CreatedAt);
-- Полнотекстовый поиск, если СУБД поддерживает
-- CREATE FULLTEXT INDEX ...
Пояснение кода:
Код показывает три типичных сценария.
В первом случае уникальный индекс по Email не только ускоряет поиск, но и запрещает дубликаты.
Во втором случае составной индекс по (UserId, CreatedAt) полезен, когда запросы часто используют оба поля вместе или фильтруют по первому полю с дальнейшей сортировкой/диапазоном по второму.
В третьем случае для текстового поиска нужен не обычный B-tree индекс, а специальный полнотекстовый механизм, потому что он предназначен для поиска слов и фраз внутри больших текстов.
Ключевые моменты:
- Кластерный индекс определяет физический порядок хранения строк в таблице или максимально близок к нему; обычно такой индекс может быть только один.
- Некластерный индекс хранит отдельную структуру ссылок на строки и может существовать в большом количестве.
- Уникальный индекс не допускает дубликаты значений в индексируемом поле или наборе полей.
- Составной индекс строится по нескольким колонкам и особенно эффективен, когда запросы используют их в нужном порядке.
- Полнотекстовый индекс нужен для поиска по словам и фразам в больших текстовых полях, а не для точного сравнения.
- Специализированные индексы вроде хэш- или пространственных зависят от СУБД и нужны для конкретных типов данных и запросов.