Differenza tra fattore di riempimento della tabella e fattore di riempimento dell'indice


16

In Postgres è possibile impostare il fattore di riempimento per un indice e una tabella. Qual è la differenza? Come decidere i valori per entrambi. Quali sono i casi d'uso?

Sto cercando di raggruppare una relazione spaziale su un indice spaziale. Ha un paio di milioni di dischi. I record vengono aggiornati continuamente, anche se ogni giorno ne vengono creati pochi nuovi.

Il caso d'uso sono le query di intervallo spaziale. Quale sarà un buon valore per il fattore di riempimento della tabella e / o il fattore di riempimento dell'indice?

Risposte:


12

Dalla pagina del manuale CREATE TABLE (enfasi aggiunta):

Il fattore di riempimento per una tabella è una percentuale compresa tra 10 e 100. 100 (imballaggio completo) è l'impostazione predefinita. Quando viene specificato un fattore di riempimento più piccolo, le operazioni INSERT impacchettano le pagine della tabella solo nella percentuale indicata; lo spazio rimanente su ciascuna pagina è riservato per l'aggiornamento delle righe su quella pagina. Questo dà a UPDATE la possibilità di posizionare la copia aggiornata di una riga sulla stessa pagina dell'originale, il che è più efficiente che posizionarla su una pagina diversa. Per una tabella le cui voci non vengono mai aggiornate, l'imballaggio completo è la scelta migliore, ma nelle tabelle fortemente aggiornate sono appropriati fattori di riempimento più piccoli.

Dalla pagina del manuale CREATE INDEX (enfasi aggiunta):

Il fattore di riempimento per un indice è una percentuale che determina quanto il metodo dell'indice tenterà di impacchettare le pagine dell'indice. Per gli alberi B, le pagine foglia vengono riempite in questa percentuale durante la creazione dell'indice iniziale e anche quando si estende l'indice a destra (valori chiave più grandi). Se successivamente le pagine diventano completamente piene, verranno divise, portando a un graduale degrado dell'efficienza dell'indice.Gli alberi B utilizzano un fattore di riempimento predefinito di 90, ma è possibile selezionare qualsiasi valore compreso tra 10 e 100. Se la tabella è statica, il fattore di riempimento 100 è meglio per ridurre al minimo le dimensioni fisiche dell'indice, ma per le tabelle fortemente aggiornate è meglio un fattore di riempimento più piccolo per ridurre al minimo la necessità di divisioni di pagina. Gli altri metodi di indice utilizzano fillfactor in modi diversi ma approssimativamente analoghi; il fattore di riempimento predefinito varia tra i metodi.


1
È consuetudine menzionare la fonte di una citazione. Anche se è facile da capire.
Erwin Brandstetter,

sì, certo) a volte dimentica ...

Mi dispiace di assillare ancora un po '. Si prega di collegarsi alla versione corrente del manuale (a meno che non sia necessario rivolgersi a uno specifico). Ho modificato. Maggiori informazioni qui .
Erwin Brandstetter,

I collegamenti sono al contrario.
Dave Johansen,

2
Ri: "Se la tabella è statica, il fattore di riempimento 100 è meglio per ridurre al minimo le dimensioni fisiche dell'indice, ma per le tabelle fortemente aggiornate è meglio un fattore di riempimento più piccolo per ridurre al minimo la necessità di divisioni di pagina." Cercare di comprendere il contesto delle "tabelle fortemente aggiornate" - significa che la tabella ha valori di riga fortemente aggiornati o che potrebbe includere anche le tabelle con righe che vengono frequentemente inserite e / o eliminate? Volevo sapere se la mia tabella, con poche modifiche ai valori di riga ma inserimenti ed eliminazioni estese, potrebbe beneficiare di un fattore di riempimento inferiore sul suo indice principale (chiave).
Reinsbrain,
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.