Ответ
B-Tree индексы кардинально ускоряют поиск, снижая его алгоритмическую сложность с линейной O(n) до логарифмической O(log n).
Наглядный пример:
Представьте таблицу с 1 миллиардом записей.
- Без индекса (Full Scan, O(n)): Базе данных придётся проверить в худшем случае 1,000,000,000 записей, чтобы найти нужную.
- С B-Tree индексом (Index Seek, O(log n)): Поиск будет похож на деление пополам. Базе данных потребуется всего лишь около 30 операций (log₂(10⁹) ≈ 30), чтобы найти нужную запись.
Разница в производительности — в миллионы раз.
Преимущества B-Tree:
- Быстрый поиск: Эффективен для точечных запросов (
WHERE id = 123). - Эффективные диапазонные запросы: Отлично подходит для запросов с
BETWEEN,>,<, так как данные в индексе уже отсортированы. - Поддержка сортировки: Может ускорять
ORDER BY, если сортировка совпадает с порядком индекса.
Недостатки (компромиссы):
- Замедление операций записи:
INSERT,UPDATE,DELETEстановятся медленнее, так как базе данных нужно не только изменить данные в таблице, но и обновить структуру B-Tree индекса. - Занимает место на диске: Индекс — это отдельная структура данных, которая требует дополнительного дискового пространства.
- Низкая селективность: Менее эффективен на полях с низкой кардинальностью (мало уникальных значений), например, на поле «пол» (
'мужской','женский'). В таких случаях полный скан таблицы может быть даже быстрее.