Wie ordnet PostgreSQL neue Datensätze physisch auf der Festplatte an (nach einem Cluster auf dem Primärschlüssel)?

9

Sie müssen wissen, wie PostgreSQL Datensätze auf der Festplatte bestellt. In diesem Fall möchte ich die in den Dokumenten angegebene Indexkombination nutzen , die meines Wissens Bitmaps verwendet, um übereinstimmende Zeilen abzurufen und sie entsprechend ihrer physischen Position zurückzugeben. Die betreffende Tabelle wurde nach ihrem Primärschlüssel gruppiert.

Soweit ich weiß, setzt PostgreSQL das Clustering nach Abschluss eines Clusters nicht automatisch fort (obwohl es sich daran erinnert, dass es gemäß einem bestimmten Index geclustert wurde). Da dies nun der Primärschlüssel ist, frage ich mich, ob die physische Speicherreihenfolge dieser entspricht (was ich, wenn dies zutrifft, zu unserem Vorteil für eine bestimmte Abfrage verwenden möchte).

Wie ordnet PostgreSQL zusammenfassend seine neuen Datensätze, insbesondere nach dem Clustering?

Vielen Dank!

Juan Carlos Coto
quelle

Antworten:

9

Zeilen in postgresql haben keine feste Reihenfolge. Datensätze werden nicht nur dort platziert, wo es freien Speicherplatz gibt. Datensätze können sich auch bewegen. Dies liegt daran, dass beim Aktualisieren einer Zeile eine neue Version der Zeile an einem neuen Speicherort erstellt wird, während die alte Version weiterhin an ihrem alten Speicherort verbleibt, bis sie durch Vakuum entfernt wird.

Eine CLUSTER-Operation sortiert alle Zeilen, hat jedoch keinen Einfluss darauf, wie die Zeilen von postgresql hinzugefügt werden. Die Daten bleiben also nicht sortiert. Postgresql führt jedoch Statistiken, darunter die Korrelation für jede Spalte zwischen der Reihenfolge der Zeilen in den Tabellen und der sortierten Reihenfolge dieser Spalte. Der Planer kann seinen Plan also weiterhin anhand der Statistiken optimieren, aus denen hervorgeht, dass die Tabelle auch dann noch größtenteils sortiert ist, wenn einige Zeilen nach einer Clusteroperation hinzugefügt wurden (oder durch Aktualisierungen verschoben wurden).

Eelke
quelle