[pgsql-jp: 40857] PostgreSQLにおける複合PKと複合INDEXの選択基準

nozawakz @ nttdata.co.jp nozawakz @ nttdata.co.jp
2011年 7月 14日 (木) 22:14:51 JST


お世話になっております。野沢と申します。


PostgreSQLにおける複合PKと複合INDEXの選択基準について
質問させてください。

下記のSQL(※)では、第1PK、第2PK、第3PKで一意に絞り込まれるため、複合PK(pk_t_z)を使っての実行計画が選択されることを
期待していたのですがExplain文で取得みると複合INDEX(idx_t_z_02)の方が選択されておりました。

PostgreSQLではHOTの「インデックス・エントリの追加をスキップ」する機能があるため、
優先的に複合PKよりも複合INDEXが選択されるのでしょうか。
PostgreSQLにおける複合PKと複合INDEXの選択基準があれば合わせてご教授ください。
 
Explain対象SQL、実行計画、実行時INDEX情報は下記のとおりです。

※[Explain対象SQL]
        SELECT 
            a, 
            b, 
            c, 
        FROM t_z                                  
        WHERE a = CAST(:subscriberId AS BIGINT)           
            AND c = CAST(:detailsSnum AS INTEGER)    
            AND b = :serviceContactId          
            AND e = 'n'; 

[実行計画]
 Index Scan using idx_t_z_02 on t_z  (cost=0.00..8.47 rows=1 width=505) (actual time=74.420..74.421 rows=1 loops=1)
   Index Cond: ((a = 86129::bigint) AND (b = '10086063       '::bpchar))
   Filter: ((c = 1) AND (e = 'n'::bpchar))
 Total runtime: 74.490 ms
(4 行)

[実行時INDEX情報]
インデックス:
    "pk_t_z" PRIMARY KEY, btree (a, b, c)
    "idx_t_z_01" btree (b)
    "idx_t_z_02" btree (a, b, d)



以上、よろしくお願い致します。


pgsql-jp メーリングリストの案内