PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wann sollten geerbte Tabellen in PostgreSQL verwendet werden?

Es gibt einige wichtige Gründe für die Verwendung der Tabellenvererbung in Postgres.

Nehmen wir an, wir haben einige Tabellen, die für Statistiken benötigt werden, die jeden Monat erstellt und gefüllt werden:

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

In diesem Beispiel haben wir 2.000.000 Zeilen in jeder Tabelle. Jede Tabelle hat eine CHECK-Einschränkung, um sicherzustellen, dass nur Daten für den übereinstimmenden Monat darin gespeichert werden.

Was also macht die Vererbung zu einem coolen Feature – warum ist es cool, die Daten aufzuteilen?

  • PERFORMANCE:Bei der Datenauswahl wählen wir * FROM statistics WHERE date BETWEEN x and Y, und Postgres verwendet die Tabellen nur dort, wo es sinnvoll ist. Z.B. SELECT * FROM statistics WHERE date BETWEEN '2010-04-01' AND '2010-04-15' scannt nur die Tabelle statistics_2010_04, alle anderen Tabellen werden nicht angerührt - schnell!
  • Indexgröße:Wir haben keine große fette Tabelle mit einem großen fetten Index zum Spaltendatum. Wir haben kleine Tabellen pro Monat mit kleinen Indizes - schnellere Lesevorgänge.
  • Wartung:Wir können für jede Monatstabelle Vakuum voll, Neuindizierung und Cluster ausführen, ohne alle anderen Daten zu sperren

Für den korrekten Einsatz der Tabellenvererbung als Performance-Booster schauen Sie sich das postgresql-Handbuch an. Sie müssen CHECK-Einschränkungen für jede Tabelle setzen, um der Datenbank mitzuteilen, auf welchen Schlüssel Ihre Daten aufgeteilt (partitioniert) werden.

Ich nutze die Tabellenvererbung intensiv, insbesondere wenn es darum geht, Protokolldaten nach Monaten gruppiert zu speichern. Hinweis:Wenn Sie Daten speichern, die sich nie ändern (Logdaten), erstellen oder indizieren Sie mit CREATE INDEX ON () WITH(fillfactor=100); Das bedeutet, dass im Index kein Platz für Updates reserviert wird - der Index ist auf der Festplatte kleiner.

UPDATE:fillfactor default ist 100, von http://www.postgresql.org/docs/9.1/static/sql-createtable.html:

Der Füllfaktor für eine Tabelle ist ein Prozentsatz zwischen 10 und 100. 100 (vollständige Verpackung) ist der Standard