[pgsql-jp: 28829] Re: 複数テーブルを統合するようなテーブルについて

tomita ntomita @ pana.net
2003年 1月 29日 (水) 15:12:41 JST


冨田です。

> ユニークでない場合は,UNION ALLを使えば良いのでは?
>
> ところで,UNION + VIEW と全く違う解としては,テーブルの継承を使う手が
> あります.これならインデックスも効きます.具体的な例は過去ログにたくさ
> んあるので省略.

継承について過去ログやマニュアル等を調べました。
で、下記のように親テーブル(oya)と子テーブル(ko)を作成して、
動作を確認しました。

CREATE TABLE oya (name text, age int, add char(30));
CREATE INDEX oya_index ON oya(name);

CREATE TABLE ko () INHERITS (oya);
CREATE INDEX ko_index ON ko(name);

子テーブル(ko)にデータを追加
insert into ko values('popo','26','Osaka');
insert into ko values('pupu','35','Tokyo');
insert into ko values('hoge','12','Kyoto');

動作を確認した所、以下のように、indexが効いていることを確認しました。

EXPLAIN select * from oya where name='hoge';
--------------------------------------------------------------------------------------
 Result  (cost=0.00..34.14 rows=10 width=130)
   ->  Append  (cost=0.00..34.14 rows=10 width=130)
         ->  Index Scan using oya_index on oya  (cost=0.00..17.07 rows=5 width=130)
               Index Cond: (name = 'hoge'::text)
         ->  Index Scan using ko_index on ko oya  (cost=0.00..17.07 rows=5 width=130)
               Index Cond: (name = 'hoge'::text)
(6 rows)

1つ質問ですが、継承元と継承先のデータ格納領域はどのようになっているのでしょうか?
別領域になっているのでしょうか?
それともシンボリック・リンクのような感じで、継承先が継承元の領域を見ているのでしょうか?

今回の質問の発端は、
1テーブルに500万レコード放り込む日次バッチがあり、
3か月分データを保持するといった物で、90日x500万件=4億5000万件
となってしまう為、これを複数テーブルに分けて分散させたい。
為でした。

ですので、継承した子テーブルと親テーブルが同一の領域になっていると、
分散する意味がなくなってしまいます。

宜しくお願い致します。



pgsql-jp メーリングリストの案内