在一个简单的分区表中:
-- 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
?< / p>
答案 0 :(得分:3)
嗯,可以通过constraint_exclusion
配置选项设置此行为。如果它是on
,则只访问具有匹配约束的分区。但是你应该小心,并选择partition
来避免重大的性能损失。考虑到分区表,它也是一样的,但是其他表不会受到影响。
查看其documentation。