Основные типы индексов в базах данных:
-
B-tree (B+tree):
- Наиболее распространенный тип.
- Подходит для широкого диапазона операций: поиск по диапазону, точное соответствие, сортировка.
- Используется по умолчанию во многих СУБД (MySQL, PostgreSQL, Oracle).
-
Хеш-индексы:
- Основан на хеш-таблице.
- Очень быстр для поиска по точному совпадению (
=).
- Не подходит для поиска по диапазону (
BETWEEN, <, >), сортировки (ORDER BY) или поиска по шаблону (LIKE).
-
Полнотекстовые индексы:
- Предназначены для поиска по тексту в текстовых полях (BLOB, TEXT).
- Позволяют искать слова или фразы, учитывать синонимы и производить морфологический анализ.
- Примеры:
MATCH...AGAINST в MySQL/MariaDB, tsvector/tsquery в PostgreSQL.
-
Пространственные индексы (R-tree):
- Используются для индексации географических или пространственных данных.
- Позволяют эффективно находить объекты в определенной области или пределах.
-
Bitmap (битовая карта):
- Используется в некоторых СУБД (например, Oracle, PostgreSQL).
- Подходит для полей с низкой кардинальностью (небольшое количество уникальных значений, например, пол, статус: активен/неактивен).
- Может быть очень эффективен для сложных запросов с операциями
AND и OR.
-
Кластеризованный индекс:
- Влияет на физический порядок хранения данных строк таблицы.
- В таблице может быть только один кластеризованный индекс.
- Часто используется для первичного ключа.
-
Некластеризованный индекс:
- Не определяет физический порядок строк.
- Содержит указатели на физическое расположение строк данных.
- Таблица может иметь несколько некластеризованных индексов.
-
Covering (покрывающий) индекс:
- Индекс, который содержит все столбцы, необходимые для выполнения запроса, включая столбцы в списке
SELECT, условиях WHERE и ORDER BY.
- Позволяет СУБД не обращаться к табличным данным, что ускоряет выполнение запроса.
-
Functional (функциональный/индекс по выражению):
- Индекс, построенный на результате функции或выражения над одним или несколькими столбцами.
- Позволяет индексировать вычисляемые значения.
При выборе типа индекса учитывается тип данных, частота и характер запросов (поиск по точному значению, диапазону, сортировка, полнотекстовый поиск и т.д.) и кардинальность столбца.