После некоторых исследований и чтения статей я нашел ответ.
Чтобы справиться с большими объемами данных, такими как миллионы записей, индексы должны быть организованы в кластеры.Кластер - это непрерывная группа секторов на диске, которую можно быстро прочитать в память.Обычно они имеют длину около 4096 байт.
Каждый из этих кластеров может содержать набор индексов, которые могут указывать на другие кластеры или данные на диске.Таким образом, если бы у нас был индекс связанного списка, каждый элемент индекса был бы составлен из коллекции индексов, содержащихся в одном кластере (скажем, 100).
Итак, когда мы ищем конкретную запись, как мы узнаем, в каком кластере она находится.Мы выполняем бинарный поиск, чтобы найти рассматриваемый кластер [O (log n)].
Однако, чтобы выполнить бинарный поиск, нам нужно знать, где находится диапазон значений в каждом кластере, поэтому нам нужны метаданные, в которых указано минимальное и максимальное значение каждого кластера и где находится этот кластер.Это замечательно.За исключением случаев, когда каждый кластер может содержать 100 индексов, а наши метаданные также хранятся в одном кластере (для скорости), тогда наши метаданные могут указывать только на 100 кластеров.
Что произойдет, если нам нужно более 100 кластеров.У нас должно быть два индекса метаданных, каждый из которых указывает на 100 кластеров (10 000 записей).Ну, этого не достаточно.Давайте добавим еще один кластер метаданных, и теперь мы можем получить доступ к 1 000 000 записей.Итак, как мы узнаем, какой из трех кластеров метаданных нам нужно запросить, чтобы найти целевой кластер данных.Мы могли бы искать то одно, то другое, но это не масштабируется.Поэтому я добавляю еще один кластер мета-метаданных, чтобы указать, какой из трех кластеров метаданных мне нужно запросить, чтобы найти целевой кластер данных.Теперь у меня есть дерево!
Так вот почему базы данных используют деревья.Это не скорость, это размер индексов и необходимость иметь индексы, ссылающиеся на другие индексы.Выше я описал дерево B + - дочерние узлы содержат ссылки на другие дочерние узлы или конечные узлы, а конечные узлы содержат ссылки на данные на диске.
Фу!