postgresでテーブル継承を使用する主な理由はいくつかあります。
たとえば、統計に必要なテーブルがいくつかあり、毎月作成されて入力されます。
statistics
- statistics_2010_04 (inherits statistics)
- statistics_2010_05 (inherits statistics)
このサンプルでは、各テーブルに2.000.000行があります。各テーブルには、一致する月のデータのみが格納されるようにするためのCHECK制約があります。
では、継承が優れた機能である理由は何ですか?データを分割するのが優れているのはなぜですか?
- パフォーマンス:データを選択するときは、SELECT * FROM statistics WHERE date BETWEEN x and Yであり、Postgresは意味のあるテーブルのみを使用します。例えば。 SELECT * FROM statistics WHERE date BETWEEN '2010-04-01' AND '2010-04-15'はテーブルstatistics_2010_04のみをスキャンし、他のすべてのテーブルは変更されません-高速です!
- インデックスサイズ:列の日付に大きなファットインデックスを持つ大きなファットテーブルはありません。月に小さなテーブルがあり、インデックスが小さく、読み取りが高速です。
- メンテナンス:他のすべてのデータをロックすることなく、毎月のテーブルでバキュームフル、インデックスの再作成、クラスター化を実行できます
パフォーマンスブースターとしてのテーブル継承の正しい使用法については、postgresqlのマニュアルを参照してください。各テーブルにCHECK制約を設定して、データが分割(パーティション化)されるキーをデータベースに通知する必要があります。
特に月ごとにグループ化されたログデータを格納する場合は、テーブルの継承を多用します。ヒント:変更されないデータ(ログデータ)を保存する場合は、CREATE INDEX ON()WITH(fillfactor =100);を使用してインデックスを作成またはインデックス付けします。これは、更新用のスペースがインデックスに予約されないことを意味します。インデックスはディスク上で小さくなります。
UPDATE:fillfactorのデフォルトは100で、http://www.postgresql.org/docs/9.1/static/sql-createtable.htmlから:
テーブルのフィルファクターは10から100の間のパーセンテージです。100(完全なパッキング)がデフォルトです