80562


SQL負荷を少なくするために部分インデックスを貼ろうと思っています。

全体のデータ量は500万件、そのなかでアクティブデータが30万件になります。

その30万件にインデックス(部分インデックス)を貼ろうと思っています。  
ただ、そのindexを貼ってみたりして実行計画を(explain
analyze)をみますが、元々あったインデックスが動いてしまい、部分インデックスが動きません。

似ているインデックスを削除すると動きます。  
そういうものなのでしょうか？

table_nameはテーブル名  
a、b、cはそれぞれカラムとなります。今はこのインデックスが動ています。  
「table_name_a_b_c_idx btree (a, b, c) WHERE seibetu = 'm'::bpchar;」

新しく部分インデックスを貼りたいです。  
table_name_a_b_c_idx btree (a, b, c) WHERE seibetu = 'm'::bpchar and a >
'2021-01-01 00:00:00';

ただ下の新しく貼ったインデックスは似ているインデックスがあると動いてくれません。  
ほぼ同じインデックスがある場合は動かないのでしょうか？  
思考錯誤中です。やり方がまちがっているのでしょうか？  
ご指導お願いします。


CC BY-SA 4.0
2021-08-02T02:17:10.807
80531
2021-08-03T09:14:05.620
2021-08-02T03:57:59.443
20350
20350
question
postgresql database
postgresql 部分インデックスを貼っても似ているインデックスがあるので動かない


実行計画は、PostgreSQLが最適と判断したもの(実行順序、使用するインデクス等)を使用するので、選択されないのであれば、効果はないと判断されている可能性はあります。

効果はあるはず、と机上検討されているのであれば、インデクスを追加した後「`VACUUM
FULL`」で統計情報を更新すると、追加したインデクスを使うようになるかも知れません。


CC BY-SA 4.0
2021-08-03T09:14:05.620
80562
2021-08-03T09:14:05.620
20098
80531
answer