[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 メーリングリストの案内