Зачем в базах данных используются B-деревья и B+-деревья?

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

Ответ

B-деревья и их вариация B+-деревья — это сбалансированные древовидные структуры данных, которые СУБД используют для организации индексов. Они обеспечивают эффективный поиск, вставку и удаление записей с логарифмической сложностью O(log n), что критично для работы с большими объёмами данных на диске.

Ключевые преимущества для БД:

  • Сбалансированность: Все листья находятся на одинаковой глубине, что гарантирует предсказуемую производительность.
  • Оптимизация для диска: Узлы дерева соответствуют блокам (страницам) данных на диске, что минимизирует количество операций ввода-вывода (I/O).
  • Поддержка диапазонных запросов: B+-деревья хранят все значения-указатели в листьях, связанных в список, что делает запросы типа BETWEEN или > очень эффективными.

Пример создания индекса (под капотом часто используется B+-дерево):

CREATE INDEX idx_user_email ON users(email);
-- Теперь поиск по email выполняется быстро:
SELECT * FROM users WHERE email = 'user@example.com';
Сравнение: Особенность B-дерево B+-дерево
Данные в узлах Ключи и данные Только ключи в промежуточных узлах, данные — в листьях
Диапазонные запросы Менее эффективны Очень эффективны (листья связаны)
Использование Общее назначение Стандарт для индексов в БД

Недостатки: Индексы занимают дополнительное дисковое пространство и могут замедлять операции INSERT, UPDATE, DELETE, так как дерево необходимо перестраивать.