Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

REINDEX

Синтаксис

REINDEX { INDEX | TABLE | DATABASE | SYSTEM } <name>

Описание

REINDEX перестраивает индекс, используя данные таблицы, к которой относится индекс, заменяя старую копию индекса. Существует несколько сценариев использования REINDEX:

  • Индекс стал "раздутым", то есть содержит много пустых или почти пустых страниц. Это может происходить с B-деревьями в Greengage DB при определенных нестандартных сценариях использования. REINDEX позволяет уменьшить занимаемое индексом пространство путем записи новой версии индекса без "мертвых" страниц.

  • Параметр хранения индекса FILLFACTOR был изменен, и теперь требуется, чтобы изменение вступило в силу в полной мере.

Параметры

Параметр Описание

INDEX

Перестраивает указанный индекс

TABLE

Перестраивает все индексы указанной таблицы. Если у таблицы есть вторичная таблица TOAST, она также будет переиндексирована

DATABASE

Перестраивает все индексы в текущей базе данных. Индексы в общих системных каталогах также обрабатываются. Этот вариант REINDEX нельзя выполнить внутри блока транзакций

SYSTEM

Перестраивает все индексы в системных каталогах текущей базы данных. Индексы в общих системных каталогах также обрабатываются. Индексы в пользовательских таблицах не затрагиваются. Этот вариант REINDEX нельзя выполнить в блоке транзакции

name

Название конкретного индекса, таблицы или базы данных, подлежащих переиндексации. В названии индекса и таблицы может быть указана схема. В настоящее время команды REINDEX DATABASE и REINDEX SYSTEM могут переиндексировать только текущую базу данных, поэтому их параметр должен соответствовать имени текущей базы данных

Примечания

REINDEX приводит к блокировке таблиц системного каталога, что может повлиять на выполнение текущих запросов. Чтобы избежать сбоев в работе системы, запланируйте операцию REINDEX на период низкой активности.

Действие REINDEX аналогично удалению и повторному созданию индекса тем, что содержимое индекса перестраивается с нуля. Однако блокировки при этом устанавливаются другие. Команда REINDEX блокирует запись, но не чтение родительской таблицы индекса. Она также устанавливает эксклюзивную блокировку на конкретный обрабатываемый индекс, то есть блокировку на операции чтения, пытающиеся использовать этот индекс. Напротив, DROP INDEX моментально устанавливает эксклюзивную блокировку на родительскую таблицу, блокируя как запись, так и чтение. Последующая операция CREATE INDEX блокирует запись, но не чтение; поскольку индекса нет, попытки обращений к нему не предпринимаются, что означает отсутствие блокировки, но при этом чтение будет выполняться как дорогостоящее последовательное сканирование.

Для перестраивания одного индекса или индексов таблицы необходимо быть владельцем этого индекса или таблицы. Для переиндексирования базы данных необходимо быть владельцем базы данных (обратите внимание, что владелец может перестраивать индексы таблиц, принадлежащих другим пользователям). Конечно, суперпользователи всегда могут перестраивать любые индексы.

REINDEX не обновляет статистику reltuples и relpages для индекса. Чтобы обновить эту статистику, выполните операцию ANALYZE для таблицы после переиндексации.

Примеры

Перестроение одного индекса:

REINDEX INDEX my_index;

Перестроение всех индексов таблицы my_table:

REINDEX TABLE my_table;

Совместимость

Команда REINDEX отсутствует в стандарте SQL.

См. также