5.2.2 表の検索時に使用されるインデクスの例
表の検索時に使用されるインデクスの例を説明します。
(1) 例1(B-treeインデクス(単一列インデクス)の場合)
B-treeインデクスの定義例:
CREATE INDEX "IDX_C1" ON "T1" ("C1") IN "DBAREA01" EMPTY
実行するSELECT文の例:
SELECT "C1","C2","C3" FROM "T1" WHERE "C1"=100 SELECT "C1","C2","C3" FROM "T1" WHERE "C1">100 AND "C2"='U0100'
上記のSELECT文を実行した場合,B-treeインデクスIDX_C1が使用されます。
- ■B-treeインデクスが使用されないケース
-
次に示す場合は,B-treeインデクスは使用されません。
B-treeインデクスの定義例:
CREATE INDEX "IDX_C1" ON "T1" ("C1") IN "DBAREA01" EMPTY
実行するSELECT文の例:
SELECT "C1","C2","C3" FROM "T1" WHERE "C1">100 OR "C2"='U0100'
OR条件の場合,C1列だけ(またはC2列だけ)にB-treeインデクスが定義されていても,そのB-treeインデクスは使用されません。そのため,上記のSELECT文を実行した場合,B-treeインデクスIDX_C1は使用されません。
また,C1列とC2列の両方にそれぞれB-treeインデクスが定義されていても,それらのB-treeインデクスは使用されません。
(2) 例2(B-treeインデクス(複数列インデクス)の場合)
B-treeインデクスの定義例:
CREATE INDEX "IDX_C2C1" ON "T1" ("C2","C1") IN "DBAREA01" EMPTY
実行するSELECT文の例:
SELECT "C1","C2","C3" FROM "T1" WHERE "C1"=100 SELECT "C1","C2","C3" FROM "T1" WHERE "C2"='U0100' SELECT "C1","C2","C3" FROM "T1" WHERE "C1">100 AND "C2"='U0100' SELECT "C1","C2","C3" FROM "T1" WHERE "C1">100 OR "C2"='U0100'
上記のSELECT文を実行した場合,B-treeインデクスIDX_C2C1が使用されます。
(3) 例3(テキストインデクスの場合)
テキストインデクスの定義例:
CREATE INDEX "IDX_TXT_C1" ON "T1" ("C1") IN "DBAREA01" EMPTY INDEXTYPE TEXT
実行するSELECT文の例:
SELECT "C1","C2","C3" FROM "T1" WHERE "C1" LIKE '%XYZ%' SELECT "C1","C2","C3" FROM "T1" WHERE "C1" LIKE '%XYZ%' AND "C2"='U0100'
上記のSELECT文を実行した場合,テキストインデクスIDX_TXT_C1が使用されます。
- ■テキストインデクスが使用されないケース
-
次に示す場合は,テキストインデクスは使用されません。
テキストインデクスの定義例:
CREATE INDEX "IDX_TXT_C1" ON "T1" ("C1") IN "DBAREA01" EMPTY INDEXTYPE TEXT
実行するSELECT文の例:
SELECT "C1","C2","C3" FROM "T1" WHERE "C1" LIKE '%XYZ%' OR "C2"='U0100'
OR条件の場合,C1列だけ(またはC2列だけ)にテキストインデクスが定義されていても,そのテキストインデクスは使用されません。そのため,上記のSELECT文を実行した場合,テキストインデクスIDX_TXT_C1は使用されません。
なお,(1)〜(3)で説明しているインデクスが使用される例と使用されない例は代表的な例です。また,上記で説明しているインデクスが使用される例であっても,探索条件の書き方によってはインデクスが使用されないことがあります。検索時に実際に使用されるインデクスを確認したい場合は,「5.2.5 SQL文の実行時に使用されるインデクスを確認する方法」を参照してください。