Hitachi

Hitachi Advanced Data Binder SQLリファレンス


7.14.1 インデクス指定の指定形式および規則

実表の検索時に使用するインデクスを指定します。または,インデクスの使用抑止を指定します。

インデクス指定は,B-treeインデクスおよびテキストインデクスが対象になります。レンジインデクスは対象外になります。

なお,実表の検索時に使用するインデクスはHADBが自動的に決定するため,インデクス指定は通常指定する必要はありません。インデクスの決定規則については,マニュアルHADB AP開発ガイドSQL文の実行時に使用されるB-treeインデクスおよびテキストインデクスを参照してください。

〈この項の構成〉

(1) 指定形式

インデクス指定::=/*>> {WITH INDEX (インデクス名)|WITHOUT INDEX} <<*/

(2) 指定形式の説明

WITH INDEX (インデクス名)

インデクス指定の直前に指定されている実表の検索時に使用するインデクスを指定します。インデクス名の指定規則については,「6.1.5 名前の修飾」の「(3) インデクス名の指定形式」を参照してください。

WITHOUT INDEX

インデクス指定の直前に指定されている実表の検索時に,インデクスを使用しない場合に指定します。この場合,実表の検索方式にテーブルスキャンが適用されます。テーブルスキャンについては,マニュアルHADB AP開発ガイドテーブルスキャンとはを参照してください。

インデクス指定が適用されたかどうかは,アクセスパス情報で確認できます。確認方法については,マニュアルHADB AP開発ガイドツリー表示に出力される情報インデクス指定を参照してください。

(3) 規則

  1. ビュー表にはインデクス指定は指定できません。

  2. 存在しないインデクス名を指定した場合,インデクス指定は無効になります。

  3. 次の条件をすべて満たす場合,インデクス指定は無効になります。

    • ナル値除外指定を指定したB-treeインデクスをインデクス名に指定した

    • B-treeインデクスの検索範囲にナル値が含まれる条件を指定した

  4. インデクス名にテキストインデクスを指定しても,HADBがテキストインデクスを有効に使用できないと判断したときは,インデクス指定は無効になります。例えば,テキストインデクスで評価できるLIKE述語が指定されていないケースなどが該当します。

  5. インデクス指定が無効になった場合,検索時に使用されるインデクスはHADBが自動的に決定します。検索時に使用されるインデクスについては,マニュアルHADB AP開発ガイドAPの性能向上に関する設計SQL文の実行時に使用されるB-treeインデクスおよびテキストインデクスを参照してください。

  6. /*>>」と「<<*/」で囲んだ文字列は注釈にはなりません。インデクス指定以外で指定するとエラーになります。

    (例)

    SELECT * FROM "T1"  /*>> comment <<*/

    上記の下線部分は注釈になりません。そのため,上記のSQL文は構文解析エラーになります。

  7. 次のように指定した場合,/**/の間は注釈と見なされるため,インデクス指定にはなりません。

    SELECT * FROM "T1" /* WITH INDEX ("IDX01") */

(4) 例題

インデクス指定の例を次に示します。

従業員表(EMPLOYEE)には,次のインデクスが定義されているとします。

例題1

B-treeインデクスBTREE_IDXを使用して,従業員表(EMPLOYEE)を検索します。

SELECT "NAME" FROM "EMPLOYEE" /*>> WITH INDEX ("BTREE_IDX") <<*/
    WHERE "SCODE" = 'S003' AND "ADDRESS" LIKE '%TOKYO%'

下線部分がインデクス指定です。

例題2

テキストインデクス(TEXT_IDX)を使用して,従業員表(EMPLOYEE)を検索します。

SELECT "NAME" FROM "EMPLOYEE" /*>> WITH INDEX ("TEXT_IDX") <<*/
    WHERE "SCODE" = 'S003' AND "ADDRESS" LIKE '%TOKYO%'

下線部分がインデクス指定です。

例題3

インデクスを使用しないで,従業員表(EMPLOYEE)を検索します。

SELECT "NAME" FROM "EMPLOYEE" /*>> WITHOUT INDEX <<*/
    WHERE "SCODE" = 'S003' AND "ADDRESS" LIKE '%TOKYO%'

下線部分がインデクス指定です。

なお,SCODE列にレンジインデクスが定義されている場合,上記のSELECT文を実行した際,レンジインデクスだけが使用されます。検索時に使用されるレンジインデクスの条件については,マニュアルHADB AP開発ガイドSQL文の実行時に使用されるレンジインデクスを参照してください。