Comment PostgreSQL ordonne-t-il physiquement les nouveaux enregistrements sur le disque (après un cluster sur la clé primaire)?

9

Besoin de savoir comment PostgreSQL ordonne les enregistrements sur le disque. Dans ce cas, je voudrais profiter de la combinaison d'index comme indiqué dans la documentation , qui, si je comprends bien, utilise des bitmaps pour obtenir des lignes correspondantes et les renvoie en fonction de leur emplacement physique. Le tableau en question a été regroupé par sa clé primaire.

Si je comprends bien, PostgreSQL ne continue pas automatiquement à faire du clustering une fois le clustering terminé (bien qu'il se souvienne qu'il s'est clusterisé selon un certain index). Maintenant, puisque c'est la clé primaire, je me demande si l'ordre de stockage physique serait conforme à cela (que si vrai, je voudrais utiliser à notre avantage pour une requête spécifique).

En résumé, comment PostgreSQL ordonne-t-il ses nouveaux enregistrements, en particulier après le clustering?

Merci beaucoup!

Juan Carlos Coto
la source

Réponses:

9

Les lignes dans postgresql n'ont pas d'ordre fixe. Non seulement les enregistrements sont placés là où il y a de l'espace libre, mais les enregistrements peuvent également se déplacer. En effet, lorsqu'une ligne est mise à jour, une nouvelle version de la ligne est créée dans un nouvel emplacement tandis que l'ancienne version continue de vivre dans son ancien emplacement jusqu'à ce qu'elle soit supprimée par le vide.

Une opération CLUSTER trie toutes les lignes mais n'affecte en effet pas la façon dont les lignes de postgresql add. Les données ne resteront donc pas triées. Cependant, postgresql conserve des statistiques parmi lesquelles se trouve la corrélation pour chaque colonne entre l'ordre des lignes dans les tables et l'ordre trié de cette colonne. Ainsi, le planificateur peut toujours optimiser son plan en fonction des statistiques qui lui indiquent que la table est toujours principalement triée même si certaines lignes ont été ajoutées après une opération de cluster (ou ont été déplacées par des mises à jour).

Eelke
la source