Rozważam użycie CLUSTER do zmiany kolejności tabeli według indeksu. Rozumiem, że to odtworzenie danych tabeli powoduje, że wszystkie istniejące indeksy stają się wzdęte lub stają się bezużyteczne. Widziałem pewne oznaki, że po klastrach wymagany jest REINDEX. Znalazłem inne referencje wskazujące, że CLUSTER wykonuje REINDEX. Dziennik Dokumentacja mówi nic o REINDEX bycia częścią klastra lub wymagane (choć sugeruje uruchomiony ANALYSE po klastrze)
Czy ktoś może definitywnie (tj. Z jakimś odniesieniem do oficjalnych dokumentów) powiedzieć, czy REINDEX jest wymagany po CLUSTER?
postgresql
DRZEWO
źródło
źródło
cluster
przenosi wiersze, więc i tak będzie musiał zaktualizować informacje o indeksie.Odpowiedzi:
Nie musisz ponownie indeksować, ponieważ
CLUSTER
skutecznie robi to za Ciebie.Mówiąc dokładniej,
CLUSTER
blokuje tabelę źródłową, a następnie tworzy nową jej kopię uporządkowaną zgodnie z indeksem docelowym. Tworzy indeksy na nowej kopii, a następnie zastępuje starą tabelę i indeksy na nowe.Pamiętaj, że dotyczy to również wersji
VACUUM FULL
9.0+.Jeśli widziałeś dyskusję sugerującą, że
CLUSTER
indeksy wzdęć mogą być ludzie, którzy zakładają, żeCLUSTER
działa jak w wersji wcześniejszej niż 9.0VACUUM FULL
. Możesz także widzieć i błędnie czytać dyskusje, które wspominają o rozdęciu indeksu spowodowanym przez starąVACUUM FULL
implementację i sugerująCLUSTER
jako alternatywę .Jest to sugerowane w dokumentacji :
Nie mówi, ale powinien, że te tymczasowe kopie zastępują oryginalny stół . (Moja śmiała).
źródło
CLUSTER
nie nie przepisać indeksów, a badania rzeczywistych plików wbase/
sposób oczywisty pokazują nowerelfilenode
s. Wygląda na to, że martwisz się problemami, których jeszcze nie masz.Mam na to nazwę: koń bez nazwy: nie trzeba ponownie tworzyć indeksów. Poza tym w
CLUSTER
dokumentacji nie ma wzmianki o tym, możemy również zapoznać się zeREINDEX
stroną:Oczywiście
CLUSTER
nie mieści się w żadnym z tych przypadków.I w
CLUSTER
dokumentach jest małe zdanie :Sugeruje to, że podobnie jak sama tabela, indeksy również są porządkowane podczas procesu - w ten sposób reindeksowanie jest bezużyteczne.
źródło
Znaleziono odwołanie w sekcji Odzyskiwanie miejsca na dysku .
źródło
Analizując wszystkie odpowiedzi, moim zdaniem właściwym sposobem na to jest ponowne indeksowanie PRZED klastrami. Ponieważ dokumentacja nie mówi, czy klaster wykonuje reindeks, czy tylko kopia indeksu, uporządkowana czy nie, myślę, że indeksowany indeks da lepszą tabelę klastrową. Następnie analiza zakończy pracę. Próżnia pełna wydaje się bezużyteczna, chyba że klaster i / lub reindex nie zwalniają martwych krotek
źródło
CLUSTER
iVACUUM FULL
daje zupełnie nową tabelę fizyczną - tam po prostu nie może być martwy po niej. Przestrzeń zajęta przez starą kopię zostanie zwolniona do końca operacji.