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,还是会像目前一样查询 a basebase_abcbase_efg

4

1 回答 1

3

好吧,可以通过constraint_exclusionconfig 选项设置此行为。如果是on,那么只有具有匹配约束的分区才会被访问。但是您应该小心,并partition改为选择以避免对性能造成严重影响。考虑到分区表也是一样,但其他表不受影响。

看看它的文档

于 2012-06-15T06:46:17.797 回答