PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Quando utilizzare le tabelle ereditate in PostgreSQL?

Ci sono alcune ragioni principali per usare l'ereditarietà delle tabelle in postgres.

Diciamo che abbiamo alcune tabelle necessarie per le statistiche, che vengono create e riempite ogni mese:

statistics
    - statistics_2010_04 (inherits statistics)
    - statistics_2010_05 (inherits statistics)

In questo esempio, abbiamo 2.000.000 di righe in ogni tabella. Ogni tabella ha un vincolo CHECK per assicurarsi che solo i dati per il mese corrispondente vengano archiviati in essa.

Quindi, cosa rende l'ereditarietà una caratteristica interessante:perché è interessante dividere i dati?

  • PERFORMANCE:Quando selezioniamo i dati, SELEZIONIAMO * DA statistiche DOVE data TRA x e Y, e Postgres utilizza solo le tabelle, dove ha senso. Per esempio. SELEZIONA * DA statistiche DOVE data TRA '2010-04-01' E '2010-04-15' scansiona solo la tabella Statistics_2010_04, tutte le altre tabelle non verranno toccate - velocemente!
  • Dimensione dell'indice:non abbiamo una tabella big fat con un indice big fat alla data della colonna. Abbiamo piccole tabelle al mese, con indici piccoli - letture più veloci.
  • Manutenzione:possiamo eseguire il vuoto pieno, reindicizzare, raggruppare su ogni tabella mensile senza bloccare tutti gli altri dati

Per l'uso corretto dell'ereditarietà delle tabelle come booster di prestazioni, guarda il manuale di postgresql. Devi impostare i vincoli CHECK su ogni tabella per dire al database, su quale chiave i tuoi dati vengono suddivisi (partizionati).

Faccio un uso massiccio dell'ereditarietà delle tabelle, soprattutto quando si tratta di archiviare i dati di registro raggruppati per mese. Suggerimento:se archivi dati, che non cambieranno mai (dati di registro), crea o indicizza con CREATE INDEX ON () WITH(fillfactor=100); Ciò significa che nell'indice non sarà riservato spazio per gli aggiornamenti:l'indice è più piccolo sul disco.

AGGIORNAMENTO:il valore predefinito di fillfactor è 100, da http://www.postgresql.org/docs/9.1/static/sql-createtable.html:

Il fattore di riempimento per una tabella è una percentuale compresa tra 10 e 100. 100 (compressione completa) è l'impostazione predefinita