3
B-дерево
Индекс
вспомогательная структура во внешней памяти
сопоставляет ключи и идентификаторы строк таблицы
Устройство: дерево поиска
сбалансированное
сильно ветвистое
только сортируемые типы данных (операции «больше», «меньше»)
результаты автоматически отсортированы
Использование
ускорение доступа
поддержка ограничений целостности
В этом модуле мы будем рассматривать только один из доступных
в PostgreSQL типов индексов: B-дерево (B-tree). Это самый часто
применяющийся на практике тип индекса. Некоторые другие типы
индексов рассмотрены в курсе DEV2.
Как и все индексы в PostgreSQL, B-дерево является вторичной
структурой — индекс не содержит в себе никакой информации, которую
нельзя было бы получить из самой таблицы. Индекс можно удалить и
пересоздать. Индексы нужны для ускорения операций, затрагивающих
небольшую часть таблицы: выборки малого количества строк, а также
поддержки ограничений целостности (первичных и уникальных ключей).
Любой индекс сопоставляет значения проиндексированных полей
(ключи поиска) и идентификаторы строк таблицы. Для этого в индексе
B-tree строится упорядоченное дерево ключей, в котором можно быстро
найти нужный ключ, а вместе с ним — и ссылку на табличную строку.
Но проиндексировать можно только данные, допускающие сортировку
(должны быть определены операции «больше», «меньше»). Например,
числа, строки и даты могут быть проиндексированы, а точки на
плоскости — нет (для них существуют другие типы индексов).
Особенностями B-дерева является его сбалансированность
(постоянная глубина) и сильная ветвистость. Хотя размер дерева
зависит от проиндексированных столбцов, на практике деревья обычно
имеют глубину не больше 4–5.