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