[pgsql-jp: 35607] Re: マルチカラムインデックスについて

武田憲太郎 takeda @ youmind.jp
2005年 6月 27日 (月) 16:36:38 JST


 武田と申します。

>プログラマがマルチカラムインデックスの順番を考慮してくれるか心配で、
>バラで定義しても変わらないのならバラにしようかなあなどと思ったわけです。

 バラの定義とマルチの定義で列数が同じなら負荷は「バラ>マルチ」ですが、↓の最後の
一節のようなアドバイスもあります。

http://www.postgresql.jp/document/pg803doc/html/indexes-multicolumn.html

 使われ方がきとんと様式化されていれば問題ないのでしょうが、引用部のような状況だ
と、ちょっと期待薄そうですね。

 折衷案としては、データモデルはあくまで自分の好きに設計してそれをviewでカプセル化
してみてはいかがでしょうか?


-----Original Message-----
From: pgsql-jp-bounces @ ml.postgresql.jp [mailto:pgsql-jp-bounces @ ml.postgresql.jp]
On Behalf Of KIMURA Norihiko
Sent: Monday, June 27, 2005 4:19 PM
To: PostgreSQL Japanese Mailing List
Subject: [pgsql-jp: 35606] Re: マルチカラムインデックスについて

木村です。

お返事ありがとうございます。

> 水野です。
>
> > -----Original Message-----
> > マルチカラムインデックスの場合、
> > 最初のカラムを検索条件に含まなかったり、ANDで結合していない場合、
> > インデックスが使われないといった事がありますが、
> > それ以外にバラでインデックスを作った場合との違い(パフォーマンス上の違いなど)
はあるのでしょうか?
>
> 私の個人的な解釈では
>   インデックスって基本的にSELECT文を高速に実行するための
>   物なので、「まずインデックスありき」ではなく、SELECT文で
>   使いたい検索条件に合わせて、それと同じカラムをインデックス
>   として定義する。
> と思っていたのですが。


なるほど、インデックスはそれを用い検索したものがあるから定義するわけで、
そのためのマルチカラムインデックスって事ですね。

なので、メンテナンス性やどう組んでもインデックスを使われるように等と考えて、
バラで組むのは本末転倒と言うわけですね。


>
> 逆説的に書くと「SELECT文の条件として使わないカラムを
> インデックスとして定義する事に意味はあるの?」
> という事です。

それは定義する気は無いのですが、

> 一気にレコード数を絞り込めるカラムがあるなら、それ単独で
> インデックスを定義してもそれなりの効果が期待できるとは
> 思います。

プログラマがマルチカラムインデックスの順番を考慮してくれるか心配で、
バラで定義しても変わらないのならバラにしようかなあなどと思ったわけです。

確かにこれは邪道と言うか本来の趣旨から外れている気もしますね。





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