• 検索結果がありません。

インデクスの優先順位

ドキュメント内 TP1/EE/Extended Data Cache 使用の手引 (ページ 107-112)

SQL 例

4   性能向上策

4.3  SQL の最適化

4.3.3  インデクスの優先順位

合は,WHERE句で先に記述した条件を使用します。そのため,検索範囲を絞り込める 条件を

WHERE

句で先に記述してください。

4-4 インデクスの優先順位

注※

1

ソートに対してインデクスを使用するケースについては,「3.3.1(1)インデクスの効 果的な使い方」を参照してください。

注※

2

集合関数に対してインデクスを使用するケースについては,「4.3.5 集合関数の高速 処理機能」を参照してください。

注※

3

インデクスを使用して列値を取り出すケースについては,「4.3.6 キースキャンによ る列値取得機能」を参照してください。

優先順位 インデクスの内容 SQLの記述例

1 すべてのインデクス構成列に=条件が指定 されているユニークインデクス

WHERE "C1" = 1

2 インデクスの第一構成列に=条件が指定さ れているインデクス

WHERE "C1" = 1

3 インデクスの第一構成列に条件が指定され ているインデクス

WHERE "C1" >= 1

WHERE "C1" BETWEEN 1 AND 10 4 ソートに使用できるインデクス1 SELECT * FROM "T1" ORDER BY "C1"

5 集合関数のCOUNT(*),またはCOUNT に使用できるインデクス2

SELECT COUNT(*) FROM "T1"

SELECT COUNT("C1") FROM "T1"

SELECT COUNT(DISTINCT "C1") FROM

"T1"

6 データを取り出す列をすべて含むインデク 3

SELECT "C1" FROM "T1"

インデクス を使用しな

否定の述語 WHERE "C1" <> 1

WHERE "C1" NOT BETWEEN 1 AND 10 論理演算子ORに含まれる列に定義された

インデクス

WHERE "C1" = 1 OR "C1" = 2

論理演算子NOTに含まれる列に定義され たインデクス

WHERE NOT "C1" = 1

参考

検索時に使用されたインデクスは,次に示すどちらかの方法で確認できます。

eexdbsqlコマンドの#SET OPT REPORTの実行結果

アクセスパス情報

eexdbsqlコマンドの#SET OPT REPORTについては,「10.運用コマンド」の「eexdbsql

(SQLの実行)」の「■#SET OPT REPORT(インデクス情報,作業表情報の表示)」を参 照してください。

アクセスパス情報については,「7.6 アクセスパス情報の表示」を参照してください。

検索時に使用されるインデクスの例を次に示します。

(1) 検索時に使用されるインデクスの例(その 1)

■表およびインデクスの定義

SQL

この場合,検索時に使用されるインデクスは

T1IX1

です。インデクス

T1IX1

にはインデ クスの優先順位

2

が適用され,インデクス

T1IX2

にはインデクスの優先順位

3

が適用さ れます。

(2) 検索時に使用されるインデクスの例(その 2)

■表およびインデクスの定義

SQL

CREATE FIX TABLE "T1"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01 CREATE INDEX "T1IX1" ON "T1"("C1") IN DBAREA02

CREATE INDEX "T1IX2" ON "T1"("C2") IN DBAREA03

SELECT * FROM "T1" WHERE "C1"=1 AND "C2">'ABC'

CREATE FIX TABLE "T2"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01 CREATE INDEX "T2IX1" ON "T2"("C1") IN DBAREA02

CREATE INDEX "T2IX2" ON "T2"("C2") IN DBAREA03

SELECT * FROM "T2" WHERE "C1"<=1 AND "C2">'ABC'

T2IX2

には,インデクスの優先順位

3

が適用されます。そのため,WHERE句で先に 記述した条件が優先されます。

(3) 検索時に使用されるインデクスの例(その 3)

■表およびインデクスの定義

SQL

この場合,検索時に使用されるインデクスは

T3IX1

です。複数列インデクスの場合,イ ンデクスの優先順位を第一構成列から順に比較していきます。この例では,第一構成列 に対するインデクスの優先順位が等しいため,第二構成列に対するインデクスの優先順 位が比較されます。

(4) 検索時に使用されるインデクスの例(その 4)

■表およびインデクスの定義

SQL

この場合,検索時に使用されるインデクスは

T4IX1

または

T4IX2

です。検索時に使用し たいインデクスがある場合は,使用したいインデクスの構成列に条件を付加して,イン デクスの優先順位を調整してください。

(5) 検索時に使用されるインデクスの例(その 5)

■表およびインデクスの定義

CREATE FIX TABLE "T3"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01 CREATE INDEX "T3IX1" ON "T3"("C1","C2") IN DBAREA02

CREATE INDEX "T3IX2" ON "T3"("C1","C3") IN DBAREA03

SELECT * FROM "T3" WHERE "C1"=1 AND "C2"='ABC' AND "C3">10

CREATE FIX TABLE "T4"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01 CREATE INDEX "T4IX1" ON "T4"("C1","C2") IN DBAREA02

CREATE INDEX "T4IX2" ON "T4"("C1","C3") IN DBAREA03

SELECT * FROM "T4" WHERE "C1"=1

SQL

この場合,検索時に使用されるインデクスは

T5IX1

です。インデクス

T5IX1

にはインデ クスの優先順位

2

が適用され,インデクス

T5IX2

にはインデクスの優先順位

4

が適用さ れます。

(6) 検索時に使用されるインデクスの例(その 6)

■表およびインデクスの定義

SQL

この場合,検索時に使用されるインデクスは

T6IX1

です。インデクス

T6IX1

にはインデ クスの優先順位

6

が適用され,インデクス

T6IX2

にはインデクスの優先順位が適用され ません。

(7) 検索時に使用されるインデクスの例(その 7)

■表およびインデクスの定義

CREATE FIX TABLE "T5"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01 CREATE INDEX "T5IX1" ON "T5"("C1") IN DBAREA02

CREATE INDEX "T5IX2" ON "T5"("C2") IN DBAREA03

SELECT * FROM "T5" WHERE "C1"=1 ORDER BY "C2"

CREATE FIX TABLE "T6"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01 CREATE INDEX "T6IX1" ON "T6"("C1","C2") IN DBAREA02

CREATE INDEX "T6IX2" ON "T6"("C3") IN DBAREA03

SELECT "C1","C2" FROM "T6"

CREATE FIX TABLE "T71"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA01 CREATE INDEX "T71IX1" ON "T71"("C1") IN DBAREA02

CREATE INDEX "T71IX2" ON "T71"("C2") IN DBAREA03

CREATE FIX TABLE "T72"("C1" INT,"C2" CHAR(10),"C3" INT,"C4" INT) IN DBAREA04 CREATE INDEX "T72IX1" ON "T72"("C2") IN DBAREA05

CREATE INDEX "T72IX2" ON "T72"("C3") IN DBAREA06

この場合,検索時に使用されるインデクスは

T71IX1

T72IX1

です。

XDB

では,FROM句に指定された順にネストループジョインを行います。そのため,外 表に当たる表

T71

の検索では,条件「

T71 . C1 >=1」だけが使用されます。内表

に当たる表

T72

の検索では,条件「

T72 . C2 = T71 . C2

」と「

T72 . C3 <=10」が使用されます。

ポイント

インデクスの優先順位を利用すると,インデクスの定義を変更しないでもXDBが検索時に 使用するインデクスを変更できます。XDBが検索時に使用するインデクスを変更する方法 については,マニュアル「TP1/EE/Extended Data Cache SQLプログラミング」の「検索 時に使用するインデクスを変更する方法」を参照してください。

ドキュメント内 TP1/EE/Extended Data Cache 使用の手引 (ページ 107-112)