[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 メーリングリストの案内