- PR -

複合索引

投稿者投稿内容
guest98
常連さん
会議室デビュー日: 2006/02/02
投稿数: 22
投稿日時: 2006-02-02 15:13
2列が常にともに条件句に含まれる場合、
索引は、以下のどちらの方法で作成したほうが速いのでしょうか?
CREATE INDEX IDX_NAME ON TBL_NAME (RETU1, RETU2);
     OR
CREATE INDEX IDX_NAME1 ON TBL_NAME (RETU1);
CREATE INDEX IDX_NAME2 ON TBL_NAME (RETU2);

複合索引の場合、索引がどのように作成されるのかがよく分からないのです。
(ROWIDの格納方法など、 ...うまく説明できなくてすいません)
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-02-02 15:19
検索条件はどのようなものを想定してますか?
guest98
常連さん
会議室デビュー日: 2006/02/02
投稿数: 22
投稿日時: 2006-02-02 16:03
表の結合に使用するので、簡単に書くと以下のような感じです。

SELECT
A.ID,
A.NAME,
B.SONOTA
FROM
TBL_A A,
TBL_B B
WHERE A.ID = B.ID
AND A.NAME = B.NAME
;
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2006-02-02 16:32
引用:

guest98さんの書き込み (2006-02-02 15:13) より:

2列が常にともに条件句に含まれる場合、
索引は、以下のどちらの方法で作成したほうが速いのでしょうか?



アクセスするオブジェクトの数を考えると複合索引かなという
気がしますが、実際には SQL トレースとかを取ってみないと
分からないかも。

# 単一列索引を作っても片方しかアクセスしないかもしれないし。

_________________
もしもし@RMAN 友の会
zilloll
常連さん
会議室デビュー日: 2006/02/01
投稿数: 24
投稿日時: 2006-02-02 16:40
テーブル間の結合キーといいうことですが、
主キー設定などはしてないのでしょうか。
guest98
常連さん
会議室デビュー日: 2006/02/02
投稿数: 22
投稿日時: 2006-02-02 16:46
片方のテーブルは、その2列が主キーなので、PK制約で索引が作成されます。
もう片方は、主キーが単一列で別にあるので、現在は1列ずつそれぞれに索引を作成しています。
zilloll
常連さん
会議室デビュー日: 2006/02/01
投稿数: 24
投稿日時: 2006-02-02 16:57
上記のテーブル間の結合のみのSQL文の場合、
TBL_Aは、インデックスが使用されると思いますが、
(TBL_A側で主キー設定がされていると仮定)
TBL_Bのデータを全件サーチし、1レコードずつ、
キーを利用してTBL_Aと接続することになると思うので、
TBL_Bはインデックス設定をしても使用されないと思います。
さらに絞込条件で、B.ID = 'XXX' とか B.NAME= 'XXX'という
指定がある場合は別ですが。
guest98
常連さん
会議室デビュー日: 2006/02/02
投稿数: 22
投稿日時: 2006-02-02 17:20
すいません。簡単に書きすぎたので、もう少し具体的に。。。

SELECT
 A.SYURUI,
 A.KAZU,
 B.MAKER,
 B.S_NO
FROM
 TBL_A A,
 MASTER_TBL_B B
WHERE A.H_CD = B.H_CD
AND  A.C_CD = B.C_CD
;

TBL_A   : H_CD,C_CDには単一列索引(主キーは他の列、主キー列は使用しない)
MASTER_TBL : H_CD,C_CDの2列で主キー

zillollさんの解説からすると、この状態がベストということでしょうか?
何度もすいませんが、よろしくお願いします。

スキルアップ/キャリアアップ(JOB@IT)