Какие индексы знаешь
Индексы — это структуры данных, которые ускоряют операции поиска, выборки и сортировки данных в базах данных, уменьшая количество чтений с диска. Основные типы индексов включают B-Tree, хеш-индексы, инвертированные индексы, пространственные индексы, полнотекстовые индексы и bitmap-индексы. Выбор конкретного типа зависит от характера запросов и модели данных.
Как это работает
Индексы работают по принципу дополнительной структуры, которая хранит отсортированные или хешированные значения ключей вместе с указателями на строки таблицы. При выполнении запроса СУБД сначала обращается к индексу, чтобы найти нужные записи, а затем читает их с диска. Это позволяет избежать полного сканирования таблицы, что особенно важно для больших объёмов данных.
Основные типы индексов
B-Tree и B+Tree
Самые распространённые индексы в реляционных базах данных. B-Tree поддерживает точечные и диапазонные запросы, а также сортировку. B+Tree — вариант, где все значения хранятся в листовых узлах, что повышает эффективность диапазонных запросов и последовательного доступа.
Хеш-индексы
Используют хеш-функцию для прямого преобразования ключа в адрес хранения. Отлично подходят для точечных запросов (например, поиск по первичному ключу), но неэффективны для диапазонных запросов, так как хеш-функция распределяет ключи случайным образом.
Инвертированные индексы
Применяются в полнотекстовом поиске и поисковых движках. Хранят отображение каждого слова на список документов, где оно встречается. Позволяют быстро находить документы по ключевым словам.
Пространственные индексы
Оптимизированы для геометрических данных (точки, линии, полигоны). Пример — R-tree. Используются для запросов типа «найти все точки в радиусе».
Полнотекстовые индексы
Поддерживают сложный текстовый поиск: фразы, стоп-слова, морфологию. Пример — FULLTEXT в MySQL. Отличаются от инвертированных индексов тем, что учитывают лингвистические особенности.
Bitmap-индексы
Эффективны для колонок с низкой кардинальностью (малым числом уникальных значений), например, пол или статус. Используют битовые карты для быстрого выполнения фильтрации и агрегации.
Подводные камни
Индексы ускоряют чтение, но замедляют операции записи (INSERT, UPDATE, DELETE), так как требуют обновления индекса. Также они занимают дополнительное дисковое пространство. Переиндексация и выбор неподходящего типа могут привести к деградации производительности.
Когда использовать
- B-Tree — для большинства запросов с сортировкой и диапазонами.
- Хеш-индексы — для точного совпадения по ключу.
- Инвертированные и полнотекстовые — для текстового поиска.
- Пространственные — для геоданных.
- Bitmap — для колонок с малым числом уникальных значений.
Коротко
- Индексы — это структуры данных для ускорения поиска и сортировки.
- Основные типы: B-Tree, хеш, инвертированные, пространственные, полнотекстовые, bitmap.
- Выбор зависит от типа запросов: точечные, диапазонные, текстовые, пространственные.
- Индексы замедляют запись и требуют ресурсов, поэтому нужен баланс.
