Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


5.3.3 単一列インデクスと複数列インデクスの使い分け

B-treeインデクスには,単一列インデクスと複数列インデクスがあります。

単一列インデクスと複数列インデクスの使い分けについて,次で説明します。

〈この項の構成〉

(1) 単一列インデクスを定義した方がよい場合

1つの列をキーにして検索する場合は,単一列インデクスを定義してください。

例えば,次のような検索をする場合には,列C1に単一列インデクスを定義します。

SQLの指定例
SELECT * FROM "T1" 
     WHERE "C1" = 1
B-treeインデクスの定義例
CREATE INDEX "T1IX_C1"
     ON "T1" ("C1" ASC) IN DBAREA01 EMPTY

(2) 複数列インデクスを定義した方がよい場合

1つの列だけでは検索する行を十分に絞り込めないため,複数の列をキーにして検索する行を絞り込む場合は,複数列インデクスを定義してください。

例えば,次のような検索をする場合に,列C1と列C2に対してそれぞれ単一列インデクスを定義していると,列C1または列C2のどちらか1つのB-treeインデクスしか使用されません。そのため,列C1と列C2を構成列とする複数列インデクス(T1IX_C1C2)を定義します。

SQLの指定例
SELECT * FROM "T1" 
      WHERE "C1" = 1 AND "C2" = 'A'
B-treeインデクスの定義例
CREATE INDEX "T1IX_C1C2"
      ON "T1"("C1" ASC,"C2" ASC) IN DBAREA01 EMPTY

なお,複数列インデクスを使って探索条件を評価する場合,複数列インデクスを定義したときの列の指定順に値を評価します。そのため,複数列インデクスを定義する際は,検索時に指定する探索条件などを考慮して列の指定順序を決定してください。

例えば,上記の「SQLの指定例」を実行する場合,「B-treeインデクスの定義例」のとおりCREATE INDEX文を実行することを推奨します。

(3) 複数列インデクスを使用するときの留意事項

探索条件によるデータの絞り込み範囲について説明します。

複数列インデクスを使用して検索する行を絞り込む場合,SELECT文のWHERE句に指定する探索条件によって検索範囲の絞り込み方が異なります。インデクス構成列の指定順序は,「条件」を指定することが多い列を先に指定する方が検索範囲を小さくできます。

WHERE句の探索条件の指定と検索範囲の関係を次に示します。

B-treeインデクスの定義例
CREATE INDEX "T1IX_C1C2C3" 
        ON "T1"("C1" ASC,"C2" ASC,"C3" ASC) IN DBAREA01 EMPTY
図5‒7 WHERE句の探索条件とB-treeインデクスの検索範囲

[図データ]

注※1

C2に対する条件が「条件」または「IS NULL条件」ではないため,列C3に対する条件は検索範囲の絞り込みには使用されません。

注※2

C2に対する条件がないため,列C3に対する条件は検索範囲の絞り込みには使用されません。

注※3

C1に対する条件が「条件」または「IS NULL条件」ではないため,列C2と列C3に対する条件は検索範囲の絞り込みには使用されません。

注※4

C1に対する条件がないため,列C2や列C3に対する条件は検索範囲の絞り込みには使用されません。