sql >> Database >  >> RDS >> PostgreSQL

Wanneer geërfde tabellen gebruiken in PostgreSQL?

Er zijn enkele belangrijke redenen om tabelovererving in postgres te gebruiken.

Laten we zeggen dat we enkele tabellen nodig hebben voor statistieken, die elke maand worden gemaakt en gevuld:

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

In dit voorbeeld hebben we 2.000.000 rijen in elke tabel. Elke tabel heeft een CHECK-beperking om ervoor te zorgen dat alleen gegevens voor de overeenkomende maand erin worden opgeslagen.

Dus wat maakt de overerving een coole functie - waarom is het cool om de gegevens te splitsen?

  • PRESTATIES:bij het selecteren van gegevens SELECTEREN we * UIT statistieken WAAR datum TUSSEN x en Y, en Postgres gebruikt alleen de tabellen waar dit zinvol is. bijv. SELECTEER * UIT statistieken WAAR datum TUSSEN '2010-04-01' EN '2010-04-15' alleen de tafelstatistieken_2010_04 scant, alle andere tabellen worden niet snel aangeraakt!
  • Indexgrootte:we hebben geen big fat-tabel met een big fat-index op kolomdatum. We hebben kleine tabellen per maand, met kleine indexen - snellere uitlezingen.
  • Onderhoud:we kunnen vacuüm vol, herindexeren, clusteren op elke maandtabel zonder alle andere gegevens te vergrendelen

Kijk voor het juiste gebruik van tabelovererving als prestatieverhoger in de postgresql-handleiding. U moet voor elke tabel CHECK-beperkingen instellen om de database te laten weten op welke sleutel uw gegevens worden gesplitst (gepartitioneerd).

Ik maak intensief gebruik van tabelovererving, vooral als het gaat om het opslaan van loggegevens gegroepeerd per maand. Hint:Als u gegevens opslaat die nooit zullen veranderen (loggegevens), maakt u of indexeert u met CREATE INDEX ON () WITH(fillfactor=100); Dit betekent dat er geen ruimte voor updates wordt gereserveerd in de index - index is kleiner op schijf.

UPDATE:fillfactor is standaard 100, van http://www.postgresql.org/docs/9.1/static/sql-createtable.html:

De vulfactor voor een tabel is een percentage tussen 10 en 100. 100 (volledige verpakking) is de standaard



  1. Het optimaliseren van een SELECT-query die langzaam draait op Oracle die snel draait op SQL Server

  2. MySQL ASIN() Functie – Retourneer de boogsinus van een getal

  3. tabelnaam doorgeven als plsql-parameter

  4. Top Facebook-groepen voor Analytics, Big Data, Data Mining, Hadoop, NoSQL, Data Science