sql >> Databáze >  >> RDS >> PostgreSQL

Kdy použít zděděné tabulky v PostgreSQL?

Existuje několik hlavních důvodů pro použití dědičnosti tabulek v postgresu.

Řekněme, že máme nějaké tabulky potřebné pro statistiky, které se vytvářejí a plní každý měsíc:

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

V tomto vzorku máme v každé tabulce 2 000 000 řádků. Každá tabulka má omezení CHECK, aby se zajistilo, že se do ní uloží pouze data za odpovídající měsíc.

Proč je tedy dědičnost skvělou funkcí – proč je skvělé dělit data?

  • VÝKON:Při výběru dat VYBÍRÁME * FROM statistiky WHERE datum MEZI x a Y a Postgres používá pouze tabulky, kde to dává smysl. Např. SELECT * FROM statistics WHERE date BETWEEN '2010-04-01' AND '2010-04-15' pouze skenuje tabulku statistics_2010_04, všech ostatních tabulek se nedotknete - rychle!
  • Velikost indexu:Nemáme žádnou velkou tlustou tabulku s velkým indexem tuku k datu sloupce. Máme malé tabulky za měsíc, s malými indexy – rychlejší čtení.
  • Údržba:Můžeme spustit vakuové plné, reindexovat, cluster na každý měsíc tabulky, aniž bychom zamykali všechna ostatní data

Pro správné použití dědičnosti tabulek jako zesilovače výkonu se podívejte do manuálu postgresql. Musíte nastavit omezení CHECK pro každou tabulku, abyste databázi řekli, na jakém klíči se vaše data rozdělí (rozdělí).

Velmi využívám dědičnost tabulek, zejména pokud jde o ukládání dat protokolu seskupených podle měsíců. Tip:Pokud ukládáte data, která se nikdy nezmění (data protokolu), vytvořte nebo indexujte pomocí CREATE INDEX ON () WITH(fillfactor=100); To znamená, že v indexu nebude vyhrazeno žádné místo pro aktualizace – index je na disku menší.

UPDATE:fillfactor výchozí je 100, z http://www.postgresql.org/docs/9.1/static/sql-createtable.html:

Fillfactor pro tabulku je procento mezi 10 a 100. 100 (kompletní balení) je výchozí



  1. Jak vytvořit histogram v PostgreSQL

  2. Připojte se ke mně v úterý 9. dubna a získejte nejnovější zprávy o Microsoft Access

  3. postgres - kde v (seznam) - sloupec neexistuje

  4. Rozdíl implicitní konverze datového toku CAST vs ssis