Hitachi

ノンストップデータベース HiRDB Version 10 システム導入・設計ガイド(UNIX(R)用)


12.6 インデクスの優先順位

検索する表に複数のインデクスが定義されている場合,HiRDBが使用するインデクスの優先順位について,次の表に示します。SQLで使用したいインデクスの優先順位を確認してください。使用したいインデクスよりも優先順位の高い別のインデクスがある場合は,使用インデクスのSQL最適化指定で,使用したいインデクス名を指定してください。詳細については,マニュアル「HiRDB SQLリファレンス」の「使用インデクスのSQL最適化指定」を参照してください。

表12‒3 HiRDBが使用するインデクスの優先順位

優先順位

HiRDBが優先して使用するインデクスの内容

インデクスがある列(C1)に対する条件の指定例

1

(必ず使用する※1

インデクス型プラグイン専用関数の条件が「IS TRUE」であり,この関数の第一引数の列に指定したプラグインインデクス

contains(C1,'…') IS TRUE

構造化繰返し述語の探索条件に含まれるすべての列をインデクス構成列に含むインデクス

ARRAY(C1,C2)[ANY]

 (C1='ABC' and C2=10)

C1,C2の複数列インデクスを定義しています。

2

プラグイン提供関数の条件が「IS TRUE」であり,この関数の第一引数の列に指定したプラグインインデクス

within(C1,'…') IS TRUE

3

「=」の制限条件の対象になる列にある,UNIQUEを指定したインデクス

C1=100

4

「=」の制限条件の対象になる列にあるインデクス

C1=100

5

「IS NULL」の制限条件の対象になる列にあるインデクス※2

C1 IS NULL

6

LIKE述語,又はSIMILAR述語のパターン文字列に定数で「%」による前方一致比較を指定した列にあるインデクス

C1 LIKE 'ABC%'

C1 SIMILAR TO 'ABC%'

7

LIKE述語,又はSIMILAR述語のパターン文字列に定数で上記以外の前方一致比較を指定した列にあるインデクス

C1 LIKE 'ABC_'

C1 SIMILAR TO 'ABC_'

8

IN述語の制限条件の対象になる列にあるインデクス

C1 IN(10,20,30)

9

BETWEEN述語の制限条件の対象になる列にあるインデクス

C1 BETWEEN 20 AND 40

範囲条件を指定した列にあるインデクス

20<=C1 AND C1<=40

10

外への参照がない副問合せを使用したIN述語の制限条件の対象になる列にある単一列インデクス

C1 IN(SELECT C1 FROM T2)

外への参照がない副問合せを使用した限定述語「=ANY」又は「=SOME」の制限条件の対象になる列にある単一列インデクス

C1=ANY(SELECT C1 FROM T2)

C1=SOME(SELECT C1 FROM T2)

11

>,>=,<及び<=の制限条件の対象になる列にあるインデクス

C1>50

C1<=200

12※3

スカラ演算(システム定義スカラ関数,IS_USER_CONTAINED_IN_HDS_GROUPは除く)を指定した列にあるインデクス※2

length(C1)=10

13

NOT BETWEEN述語の制限条件の対象になる列にあるインデクス

C1 NOT BETWEEN 10 AND 30

14

XLIKE述語及び上記以外のLIKE述語,又はSIMILAR述語の制限条件の対象になる列にあるインデクス

C1 XLIKE '%ABC%'

C1 LIKE '%ABC%'

C1 SIMILAR TO '%ABC%'

15

集合関数(MIN又はMAX)の引数に指定した列にあるインデクス※4

MIN(C1)

MAX(C1)

16

結合条件列及びグループ分け又はソートの対象になる列にあるインデクス

ORDER BY C1

否定(NOT BETWEENを除く)の制限条件の対象になる列にあるインデクス

C1 NOT LIKE '%ABC%'

C1 IS NOT NULL

上記以外の限定述語「ANY」又は「SOME」の制限条件の対象になる列にあるインデクス

C1>=ANY(SELECT C1 FROM T2)

C1>SOME(SELECT C1 FROM T2)

限定述語「ALL」の制限条件の対象になる列にあるインデクス

C1>ALL(SELECT C1 FROM T2)

プラグイン提供関数の条件が「IS FALSE」又は「IS UNKNOWN」であり,この関数の第一引数の列に指定したプラグインインデクス

within(C1,'…') IS FALSE

(凡例)−:使用しないインデクスを示します。

  1. 関数呼出し「contains」は,HiRDB Text Search Plug-inが提供するプラグインの関数です。

  2. 関数呼出し「within」は,HiRDB Spatial Search Plug-inが提供するプラグインの関数です。

  3. 外への参照がある副問合せを含む制限条件の対象になる列にあるインデクスは使用できません。

  4. OR演算子で両側の条件式にインデクスを利用できる場合は,優先度がその条件式中の述語によって変わります。

  5. 制限条件とは,結合条件以外の探索条件のことです。

  6. 定義したインデクスが有効に利用できないとHiRDBが判断した場合は,該当するインデクスが使用されないことがあります。

注※1

このインデクスを定義していないと,実行できないでエラーとなります。必ず定義してください。

注※2

次の列に対して,ナル値を除外キーとするインデクスは使用しません。

  • 「IS NULL」の制限条件を指定した列

  • 制限条件中の「VALUE」及び「CASE式」に指定した列

  • 制限条件中の「BIT_AND_TEST」に対して「IS UNKNOWN」,「IS NOT TRUE」,又は「IS NOT FALSE」を指定し,この「BIT_AND_TEST」に指定した列

ただし,上記以外の制限条件を指定しているインデクスは使用します。その場合のナル値を除外キーとするインデクスの使用有無を表「ナル値を除外キーとするインデクスの使用有無」に示します。

注※3

SQL最適化オプションに「スカラ演算を含むキー条件の適用」を指定した場合だけ,インデクスを優先して使用します。SQL最適化オプションの詳細は,マニュアル「HiRDB UAP開発ガイド」を参照してください。また,述語の種類によっては優先順位が下がることもあります。否定が含まれない場合の優先順位は13〜15の範囲になります。否定が含まれる場合の優先順位は13〜−の範囲になります。

注※4

表の指定が一つで,GROUP BYを指定していないSQL文の場合は,集合関数(MIN又はMAX)だけを指定して,次に示すどれかの条件を満たすときに引数に指定した列のインデクスを使用します。

  • 集合関数の引数に指定した列が,単一列インデクスの構成列の場合

  • 集合関数の引数に指定した列が,除外キーを持たない複数列インデクスの第n構成列の場合で,第1構成列から第(n−1)構成列までに「=」又は「IS NULL」を指定したとき

  • 集合関数の引数に指定した列が,除外キーを持つ複数列インデクスの第n構成列の場合で,第1構成列から第(n−1)構成列までに「=」を指定したとき

    表12‒4 ナル値を除外キーとするインデクスの使用有無

    構成列に指定する制限条件

    使用有無

    IS NULL,VALUE,CASE式,BIT_AND_TEST

    IS NULL,VALUE,CASE式,BIT_AND_TEST以外※1

    指定あり

    指定あり

    使用します

    指定あり

    指定なし

    使用しません

    指定なし

    指定あり

    使用します※2

    指定なし

    指定なし

    使用しません※3

注※1

HiRDBが使用するインデクスの優先順位」に示す優先順位の4〜15の制限条件の場合です。

注※2

インデクスが有効に利用できない場合などは,HiRDBが判断してインデクスを使用しないことがあります。

注※3

次に示すすべての条件を満たす検索では使用します。

  • 選択式が,インデクス構成列を引数とする集合関数だけ

  • FROM句には,一つの表だけ指定している

  • WHERE句の指定がない