我有一张桌子
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,但可惜,事实并非如此。
Aor上没有索引B,但每个分区上都有一个主键(C,D),这似乎无关紧要,但我想我应该提一下。我也有一个 BRIN 索引C。知道为什么 Postgres 查询计划器不咨询子分区约束以避免表扫描吗?