Индексация с помощью B-tree в PostgreSQL работает за счёт хранения данных в отсортированном виде. tproger.ru Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на строки этой таблицы. tproger.ru
Некоторые особенности работы B-tree-индекса:
- Поддерево слева и справа от корня. habr.com Левое поддерево содержит значения, которые всегда строго меньше корня, а правое поддерево — значения, большие или равные корню. habr.com Это свойство работает не только для корня, но и для любого внутреннего узла. habr.com
- Листья дерева повторяют значения строк оригинальной таблицы. habr.com Они представлены в порядке возрастания или убывания. habr.com Порядок зависит от того, как создавали индекс: использовали команду DESC или ASC. habr.com По умолчанию индексное дерево строится в возрастающем порядке. habr.com
- Поиск значения начинается с корневого узла. postgrespro.com Нужно определить, к какому из дочерних узлов спуститься. postgrespro.com Например, если ищут число 37, то заходят в корень и сравнивают: 13 > 37? Нет, поэтому дальше идут направо. habr.com После этого попадают в следующий узел, где нужно принять новое решение, куда идти. habr.com В данном примере 37 лежит в диапазоне между 31 и 41. habr.com Переходят в соответствующий узел на третьем уровне, и уже там могут получить адрес строки, которая соответствует поисковому элементу 37. habr.com
С помощью B-дерева можно проиндексировать любые данные, для которых применимы операции сравнения больше/меньше/равно. tproger.ru Сюда можно отнести числа, строки, даты и время, логический тип и любые данные, которые можно ими закодировать. tproger.ru