2011年7月14日

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

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


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)

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

投稿者 xml-rpc : 2011年7月14日 22:14
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105252
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。