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