B-дерево (B-tree): Наиболее распространенный тип. Подходит для большинства операций чтения, включая WHERE, LIKE, ORDER BY.
sql
Хеш (Hash): Оптимизирован для точных совпадений (=). Не поддерживает диапазонные запросы или сортировку.
sql
Полнотекстовые (Full-Text): Используются для поиска по тексту в больших текстовых полях (VARCHAR, TEXT).
sql
Пространственные (Spatial): Для индексации географических данных (точки, линии, многоугольники). Используются с типами данных, такими как GEOMETRY или GEOGRAPHY.
sql
GIN (Generalized Inverted Index) и GiST (Generalized Search Tree) в PostgreSQL: Гибкие типы индексов, подходящие для различных задач, включая полнотекстовый поиск, индексацию массивов и JSON.
Кластерные (Clustered): Определяет физический порядок строк в таблице. Одна таблица может иметь только один кластерный индекс. Часто основан на первичном ключе.
sql
Некластерные (Non-Clustered): Отдельная структура данных, хранящая пары "значение столбца (или столбцов) + указатель на строку данных". Таблица может иметь множество некластерных индексов.
Сравнение:
| Тип индекса | Применение | Операции |
|---|---|---|
| B-дерево | Общее, большинство типов данных | =, <, >, <=, >=, BETWEEN, LIKE (начало) |
| Хеш | Точное совпадение (=) | = |
| Полнотекстовые | Поиск по тексту | MATCH AGAINST (MySQL), to_tsquery (PostgreSQL) |
| Пространственные | Географические данные | Пространственные функции |
| Кластерные | Физическое упорядочивание строк | Ускоряет выборку диапазонов |
| Некластерные | Ускоряет поиск по индексированным столбцам | =, <, >, <= и т.д. |