私はテーブルを持っています
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
。パーティションの設計に基づいて、パーティションの制約をチェックして指定された の可能な値を決定するだけでよいことがわかると思いましたがB
、A
残念ながらそうではありません。
A
またはにはインデックスはありませんが、各パーティションにB
主キーがあり(C,D)
ます。これは重要ではないように見えますが、言及する必要があると考えました。BRINインデックスも持っていますC
。テーブル スキャンを回避するために、Postgres クエリ プランナーがサブパーティションの制約を調べない理由はありますか?