1

私はテーブルを持っています

T (A int, B int, C long, D varchar)

each でパーティション化され、eachAでサブパーティション化されますB(つまり、それぞれ単一の値を持つパーティションをリストします)。Aカーディナリティが 10 未満であり、Bカーディナリティが 100 未満です。T約60億行あります。

クエリを実行すると

select distinct B from T where A = 1;

最上位のパーティション ( の場合A != 1) をプルーニングしますが、すべてのサブパーティションでテーブル スキャンを実行して、 の個別の値を見つけますB。パーティションの設計に基づいて、パーティションの制約をチェックして指定された の可能な値を決定するだけでよいことがわかると思いましたがBA残念ながらそうではありません。

Aまたはにはインデックスはありませんが、各パーティションにB主キーがあり(C,D)ます。これは重要ではないように見えますが、言及する必要があると考えました。BRINインデックスも持っていますC。テーブル スキャンを回避するために、Postgres クエリ プランナーがサブパーティションの制約を調べない理由はありますか?

4

1 に答える 1