[pgsql-jp: 27134] インデックスについて

多田 知之 tom @ tyo.co.jp
2002年 8月 23日 (金) 21:04:21 JST


多田といいます

聞くは一時の恥ということで、すいません。
インデックスについての2点ほど質問したいことがあります。

石井さん著の「PostgreSQL完全攻略ガイド 改訂第三版」
3.8.6 インデックスと関数インデックス(P191)
を一応一通り読みました。インデックス=索引 と理解しています。

そこで、次のようなテーブル(userdata)があったとします。

   Attribute    |           Type           |
----------------+--------------------------+
 id             | integer                  |
 name           | text                     |
 mail           | text                     |
 birth          | date                     |
Indices: userdata_pkey

このうち、idはシリアル型として定義したので、自動的にインデックスが作成さ
れています
create unique index userdata_pkey on userdata (id);



[質問1]
さて、質問なのですが、この場合インデックスの恩恵にあずかるのは
select * from userdata where id=34;
のようにインデックスとして登録したidを対象に検索した場合であり、
select * from userdata where mail='tom @ tyo.co.jp';
のように、インデックスとして登録していないmailフィールドを検索対象とした
場合は意味がないということでよろしいでしょうか?

[質問2]
質問1での私の推測が当たっていると仮定して・・・
select * from userdata where mail='tom @ tyo.co.jp' and name='多田'
のような検索を行う場合、有効なインデックスとは

create index userdata_mail_name on userdata(mail,name)
のように2フィールドをまとめたインデックスの方がよいのでしょうか?
それとも・・・

create index userdata_mail on userdata(mail)
create index userdata_name on userdata(name)
のようにフィールドごとにインデックスを作成した方がよいのでしょうか?


すいませんが、よろしくお願いいたします。


多田知之                  
─────────────
E-mail:tom @ tyo.co.jp      





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