Istnieje kilka głównych powodów używania dziedziczenia tabel w postgresie.
Powiedzmy, że mamy kilka tabel potrzebnych do statystyk, które są tworzone i wypełniane każdego miesiąca:
statistics
- statistics_2010_04 (inherits statistics)
- statistics_2010_05 (inherits statistics)
W tym przykładzie w każdej tabeli mamy 2 000 000 wierszy. Każda tabela ma ograniczenie CHECK, aby upewnić się, że przechowywane są w niej tylko dane z pasującego miesiąca.
Więc co sprawia, że dziedziczenie jest fajną funkcją — dlaczego dzielenie danych jest fajne?
- WYDAJNOŚĆ:Wybierając dane, WYBIERAMY * ZE statystyk GDZIE data POMIĘDZY x i Y, a Postgres używa tylko tabel tam, gdzie ma to sens. Np. SELECT * FROM Statistics GDZIE data BETWEEN '2010-04-01' AND '2010-04-15' skanuje tylko statystyki tabeli_2010_04, wszystkie inne tabele nie zostaną dotknięte - szybko!
- Rozmiar indeksu:nie mamy dużej tabeli z dużym indeksem z dużym indeksem w dniu kolumny. Mamy małe tabele miesięcznie, z małymi indeksami - szybsze odczyty.
- Konserwacja:możemy uruchomić pełną próżnię, reindeksować, klastrować w tabeli każdego miesiąca bez blokowania wszystkich innych danych
Aby poprawnie używać dziedziczenia tabel jako wzmacniacza wydajności, zapoznaj się z instrukcją postgresql. Musisz ustawić ograniczenia CHECK na każdej tabeli, aby poinformować bazę danych, na którym kluczu dane zostaną podzielone (partycjonowane).
Często korzystam z dziedziczenia tabel, zwłaszcza jeśli chodzi o przechowywanie danych dziennika pogrupowanych według miesięcy. Wskazówka:Jeśli przechowujesz dane, które nigdy się nie zmienią (dane dziennika), utwórz lub indeksuj za pomocą CREATE INDEX ON () WITH(fillfactor=100); Oznacza to, że w indeksie nie będzie zarezerwowane miejsce na aktualizacje — indeks na dysku jest mniejszy.
UPDATE:fillfactor domyślna wartość to 100, z http://www.postgresql.org/docs/9.1/static/sql-createtable.html:
Współczynnik wypełnienia tabeli to wartość procentowa między 10 a 100. 100 (pełne opakowanie) jest wartością domyślną