Я рассматриваю возможность использования CLUSTER для изменения порядка таблицы по индексу. Я понимаю, что такое воссоздание данных таблицы делает все существующие индексы либо раздутыми, либо бесполезными. Я видел некоторые признаки того, что после кластера требуется REINDEX. Я нашел другие ссылки, которые указывают, что CLUSTER делает REINDEX. Официальная документация ничего не говорит вообще о REINDEX быть частью кластера или требуется (Хотя это предложить работает ПРОАНАЛИЗИРУЙТЕ после Кластера)
Может ли кто-нибудь окончательно (т.е. с какой-то ссылкой на официальные документы) сказать, требуется ли REINDEX после CLUSTER?
postgresql
ДЕРЕВО
источник
источник
cluster
перемещает строки, поэтому ему придется обновлять информацию индекса в любом случае.Ответы:
Вам не нужно переиндексировать, потому что
CLUSTER
эффективно делает это за вас.Более конкретно,
CLUSTER
блокирует исходную таблицу, а затем создает новую ее копию, упорядоченную в соответствии с целевым индексом. Он создает индексы для новой копии, а затем заменяет старую таблицу и индексы новыми.Обратите внимание, что это также верно
VACUUM FULL
в 9.0+.Если вы видели обсуждение, предполагающее, что
CLUSTER
индексы раздуты, это могут быть люди, которые полагают, что этоCLUSTER
работает как до 9.0VACUUM FULL
. Возможно, вы также видите и неправильно читаете обсуждения, в которых упоминается раздувание индекса, вызванное старойVACUUM FULL
реализацией, и предложениеCLUSTER
в качестве альтернативы .Это подразумевается в документации :
То, что это не говорит, но должно, - то, что те временные копии тогда заменяют оригинальную таблицу . (Жирный мой).
источник
CLUSTER
никак не перепишут индексы, и экспертизы фактических файловbase/
ясно покажут новыеrelfilenode
с. Кажется, вы беспокоитесь о проблемах, которых у вас пока нет.У меня есть a_horse_with_no_name: вам не нужно пересоздавать индексы. Помимо того, что
CLUSTER
документация не упоминает об этом, мы также можем дополнительно просмотретьREINDEX
страницу:Понятно,
CLUSTER
не попадает ни в один из этих случаев.И в документах есть небольшое предложение
CLUSTER
:Это говорит о том, что, как и сама таблица, индексы также переупорядочиваются во время процесса - таким образом, повторная индексация становится бесполезной.
источник
Нашел ссылку, в разделе Восстановление дискового пространства .
источник
Анализируя все ответы, на мой взгляд, правильный способ сделать это - переиндексировать ПЕРЕД кластером. Поскольку в документации не указано, выполняет ли кластер переиндексацию или нет, а только копия индекса, упорядоченная или нет, я думаю, что индексированный индекс приведет к лучшей кластеризованной таблице. После этого анализ завершит работу. Полный вакуум, прежде всего, кажется бесполезным, если только кластер и / или переиндекс не освобождают мертвые кортежи
источник
CLUSTER
иVACUUM FULL
производит совершенно новый физический стол - там просто не может быть мертвым после него. Пространство, используемое старой копией, будет освобождено к концу операции.