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

Hvornår skal man bruge nedarvede tabeller i PostgreSQL?

Der er nogle vigtige grunde til at bruge tabelarv i postgres.

Lad os sige, vi har nogle tabeller, der er nødvendige for statistik, som oprettes og udfyldes hver måned:

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

I dette eksempel har vi 2.000.000 rækker i hver tabel. Hver tabel har en CHECK-begrænsning for at sikre, at kun data for den matchende måned bliver gemt i den.

Så hvad gør arven til en cool feature - hvorfor er det fedt at opdele dataene?

  • YDELSE:Når vi vælger data, VÆLGER vi * FRA statistik HVOR dato MELLEM x og Y, og Postgres bruger kun tabellerne, hvor det giver mening. For eksempel. VÆLG * FRA statistik HVOR dato MELLEM '2010-04-01' OG '2010-04-15' scanner kun tabelstatistikken_2010_04, alle andre tabeller bliver ikke rørt - hurtigt!
  • Indeksstørrelse:Vi har ingen stor fedttabel med et stort fedtindeks på kolonnedatoen. Vi har små tabeller om måneden med små indekser - hurtigere læsning.
  • Vedligeholdelse:Vi kan køre vakuum fuld, genindeksere, klynge på hver månedstabel uden at låse alle andre data

For korrekt brug af tabelarv som ydeevneforstærker, se i postgresql manualen. Du skal indstille CHECK-begrænsninger på hver tabel for at fortælle databasen, på hvilken nøgle dine data bliver opdelt (partitioneret).

Jeg gør stor brug af tabelarv, især når det kommer til at gemme logdata grupperet efter måned. Tip:Hvis du gemmer data, som aldrig vil ændre sig (logdata), skal du oprette eller indeksere med CREATE INDEX ON () WITH(fillfactor=100); Det betyder, at der ikke vil blive reserveret plads til opdateringer i indekset - indekset er mindre på disken.

OPDATERING:fillfactor standard er 100, fra http://www.postgresql.org/docs/9.1/static/sql-createtable.html:

Fyldfaktoren for en tabel er en procentdel mellem 10 og 100. 100 (fuldstændig pakning) er standard



  1. Lagret procedure, der automatisk sletter rækker ældre end 7 dage i MYSQL

  2. Returner primære nøgler fra en sammenkædet server i SQL Server (T-SQL-eksempler)

  3. Effekt af NOLOCK-tip i SELECT-sætninger

  4. Undgå talkonflikter med Microsoft SQL-sekvenser