In che modo PostgreSQL ordina fisicamente i nuovi record su disco (dopo un cluster sulla chiave primaria)?


9

È necessario sapere come PostgreSQL ordina i record su disco. In questo caso, vorrei sfruttare la combinazione di indici come indicato nei documenti , che a quanto ho capito usa bitmap per ottenere righe corrispondenti e le restituisce in base alla loro posizione fisica. La tabella in questione è stata raggruppata in base alla sua chiave primaria.

Da quanto ho capito, PostgreSQL non continua automaticamente a fare il clustering al termine di un cluster (sebbene si ricordi che si è raggruppato secondo un certo indice). Ora, poiché questa è la chiave primaria, mi chiedo se l'ordine di archiviazione fisica sarebbe conforme a quello (che se fosse vero vorrei usare a nostro vantaggio per una query specifica).

In sintesi, come fa PostgreSQL a ordinare i suoi nuovi record, specialmente dopo il clustering?

Grazie mille!

Risposte:


9

Le righe in postgresql non hanno un ordine fisso. Non solo i record posizionati dove mai ci sono record di spazio libero possono anche spostarsi. Questo perché quando una riga viene aggiornata viene creata una nuova versione della riga in una nuova posizione mentre la versione precedente continua a vivere nella sua posizione precedente fino a quando non viene rimossa dal vuoto.

Le operazioni di un CLUSTER ordinano tutte le righe ma non influiscono sul modo in cui le righe di postgresql aggiungono. Quindi i dati non rimarranno ordinati. Comunque postgresql mantiene le statistiche tra le quali c'è la correlazione per ogni colonna tra l'ordine delle righe nelle tabelle e l'ordine ordinato di quella colonna. Quindi il planner può ancora ottimizzare il suo piano in base alle statistiche che indicano che la tabella è ancora in gran parte ordinata anche se alcune righe sono state aggiunte dopo un'operazione del cluster (o sono state spostate dagli aggiornamenti).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.