1

単純なパーティションテーブルの場合:

-- note: no records stored in base, only inheritors of base
create table base(
   base_id       bigint,
   base_tp       char(3) not null,
   ... );

create table base_abc(
   base_id       bigserial   primary key,
   base_tp       default 'abc'
                 check( base_tp = 'abc' ),
   ...
) inherits( base );


create table base_efg(
   base_id       bigserial   primary key,
   base_tp       default 'efg'
                 check( base_tp = 'efg' ),
   ...
) inherits( base );

クエリのwhere句を使用する場合base_tp、たとえば、

select * from base where ... and base_tp='abc'

9.2では、クエリはテーブルのみを選択するように最適化されますbase_abcか、それとも現在のようにbase、、、base_abcおよびbase_efg

4

1 に答える 1

3

さて、この動作はconstraint_exclusionconfig オプションで設定できます。の場合on、制約が一致するパーティションのみがアクセスされます。ただし、注意して、partitionパフォーマンスへの重大な影響を避けるために代わりに選択する必要があります。分割されたテーブルを考慮しても同じですが、他のテーブルは影響を受けません。

そのドキュメントを見てください。

于 2012-06-15T06:46:17.797 に答える