Всегда ли индекс в базах данных реализован как дерево?

«Всегда ли индекс в базах данных реализован как дерево?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет. Хотя B-дерево и его вариации (B+ дерево) — наиболее распространенная структура для индексов в реляционных СУБД, существуют и другие типы, оптимизированные под разные сценарии:

Тип индекса Структура данных Основное применение Пример СУБД
B-дерево / B+ дерево Сбалансированное дерево Диапазонные запросы (BETWEEN, >, <, сортировка) PostgreSQL, MySQL (InnoDB), Oracle
Хеш-индекс Хеш-таблица Точечное равенство (=), очень быстрый поиск по ключу MySQL (MEMORY engine), PostgreSQL (тип HASH)
Bitmap-индекс Битовые карты (bit arrays) Колонки с низкой кардинальностью (пол, статус), OLAP-системы Oracle, PostgreSQL (расширения)
GiST, SP-GiST, GIN Различные деревья/массивы Сложные данные (гео-данные, полнотекстовый поиск, JSON) PostgreSQL

Пример создания хеш-индекса в PostgreSQL:

CREATE INDEX idx_name_hash ON users USING HASH (email);

Выбор структуры индекса зависит от СУБД, типа данных и паттернов запросов.