Какие структуры данных используются для хранения индексов в базах данных?

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

Ответ

В базах данных для хранения индексов используются специализированные структуры данных, оптимизированные для быстрого поиска. Основные из них:

  • B-деревья (и их вариация B+ деревья) — наиболее распространённая структура. Она поддерживает эффективный поиск по диапазону, вставку и удаление, сохраняя сбалансированность. Данные хранятся как в листьях, так и во внутренних узлах (B-дерево) или только в листьях (B+ дерево).
  • Хеш-индексы — обеспечивают доступ к записи за время, близкое к O(1), по точному совпадению ключа. Однако они неэффективны для поиска по диапазону (например, WHERE id > 100).
  • Bitmap-индексы — эффективны для столбцов с небольшим количеством уникальных значений (низкая кардинальность). Каждому уникальному значению соответствует битовая карта (битовая строка), где каждый бит указывает, содержит ли соответствующая строка таблицы это значение.

Пример сравнения на SQL:

-- Создание индекса на основе B-дерева (по умолчанию в PostgreSQL, MySQL InnoDB)
CREATE INDEX idx_user_email ON users(email);

-- Создание хеш-индекса (PostgreSQL, подходит для точного поиска)
CREATE INDEX idx_user_id_hash ON users USING HASH(id);

Выбор структуры зависит от типа запросов: B-деревья — универсальный выбор для большинства операций, хеш-индексы — для точечного доступа, bitmap — для аналитических запросов по столбцам-перечислениям.