各種バージョン
postgres のバージョンは9.5
AWS上のEC2に作成
EC2はCentOS 6.8
テーブル構成
親テーブル A (1億レコードほど)
小テーブル a,b,c,d.... (イベントがあるごとに作る運用となっている。大体500万レコードほど)
それぞれindexの構成は同じ。
小テーブルは親テーブルをパーティションのため継承している。
質問させていただきたいこと
継承によるパーティションがされているテーブルAに対して、
explain analyze select count(*) from A;
を投げた所、小テーブルのScan方法のほとんどが index only scan だったのですが、
とあるテーブルではSeq Scanでした。
そのテーブルは 30行しか入っていません。
(なぜこのような小テーブルがあるのかは謎です。)
select で取得するカラムがあるのであれば、行数が少ないのでindexを読まないという選択があるのはわかります。
しかし、今回はcount(*)なので、行数が少ないにせよindexを読んだほうがほんの少し(本当に少しですが)早いと思います。
テーブルよりもindexのサイズは小さいはずです。
なぜindexを読まないのでしょうか。
30行程度なら「index読もうがテーブル読もうが誤差だ誤差!」みたいな丼勘定なのでしょうか。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/24 13:06