15
Построение B-дерева
Используется сортировка
сначала все строки сортируются
затем строки собираются в листовые индексные страницы
ссылки на них собираются в страницы следующего уровня
и так далее, пока не дойдем до корня
Может выполняться параллельно
max_parallel_maintenance_workers
Ограничение
maintenance_work_mem, так как операция не частая
При построении индекса (речь идет про B-дерево) сервер мог бы
добавлять записи в пустой индекс по одной, обрабатывая
последовательно строки таблицы. Но такой способ крайне
неэффективен.
Поэтому при создании и перестроении индекса используется
сортировка: все строки таблицы сортируются, и формируются записи,
которые раскладываются по листовым индексным страницам. Затем
достраиваются верхние уровни дерева, состоящие из ссылок на
элементы страниц нижележащего уровня, до тех пор, пока на
очередном уровне не получится одна страница — она и будет корнем
дерева.
Сортировка устроена точно так же, как рассматривалось выше. Однако
размер памяти ограничен не work_mem, а maintenance_work_mem,
поскольку операция создания индекса не слишком частая и имеет
смысл выделить для нее больше памяти.
Построение индекса может выполняться параллельно. Количество
рабочих процессов выбирается так же, как и при выполнении
параллельных запросов (в зависимости от размера таблицы), но
ограничено значением параметра max_parallel_maintenance_workers.