W jaki sposób PostgreSQL fizycznie porządkuje nowe rekordy na dysku (po klastrze na kluczu podstawowym)?

9

Musisz wiedzieć, jak PostgreSQL porządkuje rekordy na dysku. W tym przypadku chciałbym skorzystać z kombinacji indeksów, jak podano w dokumentacji , która, jak rozumiem, używa bitmap, aby uzyskać pasujące wiersze i zwraca je zgodnie z ich fizyczną lokalizacją. Tabela została skupiona według klucza podstawowego.

Jak rozumiem, PostgreSQL nie automatycznie kontynuuje tworzenie klastrów po zakończeniu klastrowania (chociaż pamięta, że ​​klastrował zgodnie z określonym indeksem). Ponieważ jest to klucz podstawowy, zastanawiam się, czy fizyczna kolejność przechowywania byłaby zgodna z tym (co prawda, chciałbym wykorzystać na naszą korzyść dla konkretnego zapytania).

Podsumowując, w jaki sposób PostgreSQL porządkuje swoje nowe rekordy, szczególnie po klastrowaniu?

Dziękuję bardzo!

Juan Carlos Coto
źródło

Odpowiedzi:

9

Wiersze w postgresql nie mają ustalonej kolejności. Rekordy są umieszczane nie tylko tam, gdzie jest dostępna wolna przestrzeń, ale rekordy mogą się także przemieszczać. Wynika to z faktu, że gdy wiersz jest aktualizowany, nowa wersja wiersza jest tworzona w nowej lokalizacji, podczas gdy stara wersja nadal działa w starej lokalizacji, dopóki nie zostanie usunięta przez próżnię.

Operacje CLUSTER sortują wszystkie wiersze, ale tak naprawdę nie wpływają na sposób dodawania wierszy przez postgresql. Dlatego dane nie zostaną posortowane. Jednak postgresql prowadzi statystyki, wśród których jest korelacja dla każdej kolumny między kolejnością wierszy w tabelach a sortowaną kolejnością tej kolumny. Dlatego planista może nadal optymalizować swój plan na podstawie statystyk, które wskazują, że tabela jest nadal w większości posortowana, nawet jeśli niektóre wiersze zostały dodane po operacji klastra (lub zostały przeniesione przez aktualizacje).

Eelke
źródło