Специфичные индексы

Когда B-Tree недостаточно, в дело вступают специализированные алгоритмы. Каждый из них создан под узкую задачу: от поиска по опечатке до расчета кратчайшего пути курьера.

1. Hash-индексы: Скорость ценой гибкости

Работает как обычная хэш-таблица. База пропускает ключ через хэш-функцию и мгновенно получает адрес строки. Это дает сложность O(1) — поиск по миллиону UUID или длинных URL происходит моментально.

Плюс Минус
Константная скорость при поиске по точному равенству (UUID, URL). Бесполезен для диапазонов (BETWEEN, >), сортировки или LIKE запросов.
Индекс очень компактный (хранится только хэш). Могут возникать коллизии, замедляющие работу при плохих хэш-функциях.
2. Bitmap-индексы: супер для аналитики

Вместо дерева здесь используются битовые векторы (массивы из 0 и 1). Это идеально работает, когда у данных мало уникальных значений (Low Cardinality). Например, пол, статус заказа или страна.

Почему это быстро: Процессоры умеют делать битовые операции (AND/OR) на аппаратном уровне невероятно быстро. Если тебе нужно найти «Всех мужчин ИЗ Германии СО статусом Active», база просто сложит три битовые маски. Но будь осторожен: любая запись (INSERT) блокирует весь Bitmap-индекс, поэтому их используют только в аналитических хранилищах.

3. Инвертированный индекс: Мозг поисковиков

Если B-Tree ищет строку целиком, то инвертированный индекс разбирает её на части (токены). Он хранит словарь слов, где для каждого слова записан список ID документов, в которых оно встречается.

  • Где встречается: Основа Elasticsearch и Lucene. В PostgreSQL реализован через модуль GIN (Generalized Inverted Index).
  • Задача: Полнотекстовый поиск, поиск по элементам JSON-массивов.
4. Пространственные индексы (R-Tree / GiST)

Обычное дерево не понимает, что такое «находиться внутри круга» или «пересекать полигон». Для этого используются R-деревья, которые группируют объекты в иерархию прямоугольников (Bounding Boxes).

Задача Оптимальный алгоритм
«Найти все точки в радиусе 500м» R-Tree (через GiST в Postgres)
Плотные GPS-потоки и Heat-maps Quad-Tree или KD-Tree

Пространственные индексы будем разбирать отдельно