我有一张桌子
T (A int, B int, C long, D varchar)
由每个分区并由每个A
子分区B
(即,每个分区都有一个值)。A
基数 <10 且B
基数 <100。T
有大约 60 亿行。
当我运行查询
select distinct B from T where A = 1;
它修剪顶级分区(那些 where A != 1
),但对所有子分区执行表扫描以找到B
. 我以为它会知道,基于分区设计,它只需要检查分区约束来确定B
给定的可能值A
,但可惜,事实并非如此。
A
or上没有索引B
,但每个分区上都有一个主键(C,D)
,这似乎无关紧要,但我想我应该提一下。我也有一个 BRIN 索引C
。知道为什么 Postgres 查询计划器不咨询子分区约束以避免表扫描吗?