23.2. Регулярная переиндексация#
23.2. Регулярная переиндексация #
В некоторых ситуациях целесообразно периодически перестраивать индексы с помощью команды REINDEX или серии отдельных шагов перестроения.
Полностью пустые страницы индекса B-дерева освобождаются для повторного использования. Однако, все еще существует возможность неэффективного использования пространства: если все, кроме нескольких ключей индекса на странице были удалены, страница остается выделенной. Поэтому, использование шаблона, в котором большинство, но не все ключи в каждом диапазоне в конечном итоге удаляются, приведет к плохому использованию пространства. Для таких шаблонов использования рекомендуется периодическое переиндексирование.
Потенциал для раздутия в индексах не типа B-дерево плохо исследован. Рекомендуется периодический мониторинг физического размера индекса при использовании любого типа индекса, отличного от B-дерева.
Также, для индексов B-дерева, вновь построенный индекс немного быстрее доступен, чем тот, который был обновлен много раз, потому что логически смежные страницы обычно также физически смежны в новом построенном индексе. (Это не касается индексов, не являющихся индексами B-дерева). Может быть целесообразно переиндексировать периодически, чтобы улучшить скорость доступа.
REINDEX можно использовать безопасно и легко во всех случаях.
Эта команда по умолчанию требует блокировки ACCESS EXCLUSIVE
, поэтому часто предпочтительнее выполнить ее с опцией CONCURRENTLY
, которая требует только блокировки SHARE UPDATE EXCLUSIVE
.