スケーラブルデータベースサーバ HiRDB Version 8 コマンドリファレンス(UNIX(R)用)
パターン文字列に,埋込み変数,?パラメタ,SQL変数,SQLパラメタを持つLIKE述語,又はSIMILAR述語を指定すると,実行時に与えられるパターン文字列が’abc%’のように前方一致となる場合にはインデクスのサーチ範囲を絞り込めます。しかし,’%abc’のように前方一致以外の場合には,インデクスのサーチ範囲を絞り込めなくなります。
このように,実行時に与えられるパターン文字列の値によって,インデクスのサーチ範囲が絞り込めなくなる場合に,インデクスの絞り込み開始値,終了値を< >で囲んで表示します。
各サーチ条件種別に該当する探索条件を次の表に示します。
表17-1 各サーチ条件種別に該当する探索条件
サーチ条件種別 | 特長 | サーチ条件種別を作成するための条件 | |
---|---|---|---|
単一列インデクス | 複数列インデクス | ||
IS NULL | NULL値のキーが少ない場合に有効です。 | すべてのインデクス構成列にNULL述語(IS NULL)があります。 | |
IS NOT NULL | NULL値以外のキーが少ない場合に有効です。 | インデクス構成列にNULL述語(IS NOT NULL)があります。 | 作成しません。 |
IS TRUE | プラグイン提供関数によって異なります。 | プラグイン提供関数の実行結果に対する,論理述語(IS TRUE)を使用した判定があります。 | 作成しません。 |
AT | 絞り込み値の重複度が少ない場合に有効です。 | インデクス構成列の1列以上に比較述語(=)があり,これ以外の全インデクス構成列にNULL述語(IS NULL)があります。 | |
RANGE | 絞り込む範囲の件数が少ない場合に有効です。 | インデクス構成列に比較述語(>,>=,<,<=),BETWEEN述語,前方一致となるLIKE述語,又はSIMILAR述語のどれかがあります。 又は,複数列インデクスの場合,インデクス構成列の一部に比較述語(=),又はNULL述語(IS NULL)のどちらかがあります。 ただし,RANGESとなる場合を除きます。 |
|
ATS | 絞り込み値の重複度が低く,絞り込み値の個数が少ない場合に有効です。 | インデクス構成列の1列以上にIN(行値構成子※3),IN(表副問合せ),=ANY(表副問合せ),又は=SOME(表副問合せ)のどれかがあり※1,これら以外の全インデクス構成列に比較述語(=),又はIS NULLのどちらかがあります。 ただし,IN(行値構成子※3),IN(表副問合せ),=ANY(表副問合せ),又は=SOME(表副問合せ)のどれかに指定した絞り込み値の個数の積がpd_apply_search_ats_numオペランドの指定値を超えると,RANGE又はRANGESとなります※2。 |
|
RANGES | 絞り込む範囲に該当する件数が少なく,絞り込む範囲の個数も少ない場合に有効です。 | 作成しません。 | インデクス構成列の一部に,IN(行値構成子※3),IN(表副問合せ),=ANY(表副問合せ),又は=SOME(表副問合せ)のどれかがあり※1,これらがインデクス構成列の先頭の場合,又は先頭ではなく,IN(行値構成子※3),IN(表副問合せ),=ANY(表副問合せ),又は=SOME(表副問合せ)より前の構成列のすべてに比較述語(=),又はIS NULLのどちらかがあります。IN(行値構成子※3),IN(表副問合せ),=ANY(表副問合せ),又は=SOME(表副問合せ)のどれかに指定した絞り込み値の個数の積がpd_apply_search_ats_numオペランドの指定値を超えると,RANGE又はRANGESとなります※2。 ただし,ATSとなる場合を除きます。 |
絞り込み値の個数の組み合わせ数によるサーチ条件の分類について,次の表に示します。
表17-2 絞り込み値の個数の組み合わせ数によるサーチ条件の分類
指定条件 | 絞り込み値の個数の組み合わせ | サーチ条件種別 | |
---|---|---|---|
インデクス構成列の1列以上にIN(行値構成子),IN(表副問合せ),=ANY(表副問合せ),及び=SOME(表副問合せ)のどれかがあり,これら以外の全インデクス構成列に比較述語(=),又はIS NULLのどちらかがある | p>n | q>n | RANGE |
q<=n | RANGE | ||
p<=n | q>n | RANGES※1 | |
q<=n | ATS※2 | ||
インデクス構成列の一部に,IN(行値構成子),IN(表副問合せ),=ANY(表副問合せ),又は=SOME(表副問合せ)のどれかがあり,これらがインデクス構成列の先頭の場合,又は先頭ではなく,IN(行値構成子),IN(表副問合せ),=ANY(表副問合せ),又は=SOME(表副問合せ)より前の構成列のすべてに比較述語(=),又はIS NULLのどちらかがある | p>n | q>n | RANGE |
q<=n | RANGE | ||
p<=n | q>n | RANGES※1 | |
q<=n | RANGES※3 |
IS NULLは,インデクスのNULLの範囲を検索します。
例) where C1 IS NULL → SearchCnd:IS NULL
IS NOT NULLは,インデクスのNULL以外の範囲を検索します。
例) where C1 IS NOT NULL → SearchCnd:IS NOT NULL
IS TRUEは,プラグインインデクスを使用した検索の場合に表示します。
例) where SearchImageData (feature,? as blob(1M),? as varchar(1024)) IS TRUE → SearchCnd:IS TRUE
例) where Contains (SENTENCES,'添付文書データ[効能{"食あたり"}]') IS TRUE → SearchCnd:IS TRUE
例) where C1='a' → SearchCnd:AT ['a']
例) where C1='a' → SearchCnd:AT ['a']
例1) where C1='a' and C2='A' → SearchCnd:AT [('a','A')]
例2) where (C1,C2) in (('a','A')) → SearchCnd:AT [('a','A')]
例3) where (C1,C2) = ((select C1 from T2),(select C2 from T3)) → SearchCnd:AT [((SUBQ(2)),(SUBQ(3)))]
例4) where array(C1,C2) [any] ((C1,C2)=('a','A')) → SearchCnd:AT [('a','A')]
RANGEは,インデクスの絞り込み開始値から終了値までの範囲をサーチする場合に使用します。絞り込み範囲に開始値が含まれるかどうか,終了値が含まれるかどうかによって,RANGEには次の1〜4の分類があります。これらは,RANGE(...)の"..."部分に表示します。
例1) where C1 >= 'a' and C1 <= 'z' → SearchCnd:RANGE(CS-CE) ['a','z'] 注 使用するインデクスの構成列がC1の場合です。 例2) where C1 >= 'a' → SearchCnd:RANGE(CS-CE) ['a',MAX] 注 使用するインデクスの構成列がC1の場合です。 例3) where C1 <= 'a' → SearchCnd:RANGE(CS-CE) [MIN,'a'] 注 使用するインデクスの構成列がC1の場合です。
例1) where C1 >= 'a' and C1 < 'z' → SearchCnd:RANGE(CS-OE) ['a','z'] 注 使用するインデクスの構成列がC1の場合です。 例2) where C1 < 'a' → SearchCnd:RANGE(CS-OE) [MIN,'a'] 注 使用するインデクスの構成列がC1の場合です。
例1) where C1 > 'a' and C1 <= 'z' → SearchCnd:RANGE(OS-CE) ['a','z'] 注 使用するインデクスの構成列がC1の場合です。 例2) where C1 > 'a' → SearchCnd:RANGE(OS-CE) ['a',MAX] 注 使用するインデクスの構成列がC1の場合です。
例) where C1 > 'a' and C1 < 'z' → SearchCnd:RANGE(OS-OE) ['a','z'] 注 使用するインデクスの構成列がC1の場合です。
例) where C1 between 'a' and 'z' → SearchCnd:RANGE(CS-CE) ['a','z'] 注 使用するインデクスの構成列がC1の場合です。
例1) where C1 = 'a' and C2 between 'A' and 'Z' → SearchCnd:RANGE(CS-CE) [('a','A'),('a','Z')] 注 使用するインデクスの構成列がC1,C2の場合です。 例2) where (C1,C2) between ('A', 'Z') and (select C1, C2 from T2) → SearchCnd:RANGE(CS-CE)[( 'A', 'Z'),((SUBQ(2)),(SUBQ(2)))] 注 使用するインデクスの構成列がC1,C2の場合です。 例3) where (C1,C2) > ('a', 'z') and (C1,C2) < ('A', 'Z') → SearchCnd:RANGE(OS-OE)[( 'a', 'z'),( 'A', 'Z')] 注 使用するインデクスの構成列がC1,C2の場合です。 例4) where array(C1,C2) [any] ((C1,C2)<( 'A', 'Z')) → SearchCnd:RANGE(CS-OE)[(MIN,MIN),( 'A', 'Z')] 注 使用するインデクスの構成列がC1,C2の場合です。
例) where C1 in ('a','b','c') → SearchCnd:ATS ['a'],['b'],['c'] 注 使用するインデクスの構成列がC1の場合です。
例) where C1 =any(select C1 from T2) → SearchCnd:ATS [(SUBQ(2))] 注 使用するインデクスの構成列がC1の場合です。
例) where C1 in ('a','b','c') and C2=any(Select C1 from T2) → SearchCnd:ATS [('a',(SUBQ(2)))],[('b',(SUBQ(2)))], [('c',(SUBQ(2)))] 注 使用するインデクスの構成列がC1,C2の場合です。
例) where C1 in ('a','b','c') → SearchCnd:ATS ['a'],['b'],['c'] 注 使用するインデクスの構成列がC1の場合です。
例) where C1 =any(select C1 from T2) → SearchCnd:ATS [(SUBQ(2))] 注 使用するインデクスの構成列がC1の場合です。
例1) where C1 in ('a','b') and C2 in ('A','B') and C3=1 → SearchCnd:ATS [('a','A',1)],[('a','B',1)],[('b','A',1)],[('b','B',1)] 注 使用するインデクスの構成列がC1,C2,C3の場合です。 例2) where (C1,C2) in (('a','b'), ('A','B')) → SearchCnd:ATS [('a','b'),( 'A','B')] 注 使用するインデクスの構成列がC1,C2の場合です。
例1) where C1=any(select C1 from T2) and C2='a' and C3='A' → SearchCnd:ATS [((SUBQ(2)),'a','A')] 注 使用するインデクスの構成列がC1,C2,C3の場合です。 例2) where C1= 'a' and (C2,C3) in (select C2, C3 from T2) → SearchCnd:ATS [('a',(SUBQ(2)),(SUBQ(2)))] 注 使用するインデクスの構成列がC1,C2,C3の場合です。
例) where C1=any(select C1 from T2) and C2 in ('a','b') and C3 in ('A','B') → SearchCnd:ATS [((SUBQ(2)),'a','A')],[((SUBQ(2)),'a','B')], [((SUBQ(2)),'b','A')],[((SUBQ(2)),'b','B')] 注 使用するインデクスの構成列がC1,C2,C3の場合です。
RANGESは,複数列インデクスにだけ適用されます。インデクスの絞り込み開始値から終了値までの範囲を,複数回サーチする場合に使用します。
絞り込み範囲に開始値が含まれるかどうか,終了値が含まれるかどうかによって,RANGESには次の1〜3の分類があります。これらは,RANGES(...)の"..."部分に表示します。
例1) where C1 in ('a','b','c') and C2 between 'A' and 'Z' → SearchCnd:RANGES(CS-CE) [('a','A'),('a','Z')],[('b','A'),('b','Z')],[('c','A'),('c','Z')] 注 使用するインデクスの構成列がC1,C2の場合です。 例2) where C1 in ('a','b','c') → SearchCnd:RANGES(CS-CE) [('a',MIN),('a',MAX)],[('b',MIN),('b',MAX)], [('c',MIN),('c',MAX)] 注 使用するインデクスの構成列がC1,C2の場合です。 例3) where (C1,C2) in (('a', 'a'), ('b', 'b')) → SearchCnd:RANGES(CS-CE) [('a', 'a',MIN),( 'a', 'a',MAX)] , [('b', 'b',MIN),( 'b', 'b',MAX)] 注 使用するインデクスの構成列がC1,C2,C3の場合です。
例1) where C1 =any(select C1 from T2) → SearchCnd:RANGES(CS-CE) [((SUBQ(2)),MIN),((SUBQ(2)),MAX)] 注 使用するインデクスの構成列がC1,C2の場合です。 例2) where (C1,C2) = any(select C1, C2 from T2) → SearchCnd:RANGES(CS-CE) [((SUBQ(2)),(SUBQ(2)),MIN),((SUBQ(2)), (SUBQ(2)),MAX)] 注 使用するインデクスの構成列がC1,C2,C3の場合です。
例1) where C1 in ('a','b','c') and C2=any(Select C1 from T2) → SearchCnd:RANGES(CS-CE) [('a',(SUBQ(2)),MIN),('a',(SUBQ(2)),MAX)], [('b',(SUBQ(2)),MIN),('b',(SUBQ(2)),MAX)], [('c',(SUBQ(2)),MIN),('c',(SUBQ(2)),MAX)] 注 使用するインデクスの構成列がC1,C2,C3の場合です。 例2) where C1 in ('a','b') and (C2,C3)=any(Select C1,C2 from T2) and C4>'A' → SearchCnd:RANGES(CS-CE) [('a',(SUBQ(2)),(SUBQ(2)),'A'), ('a',(SUBQ(2)),(SUBQ(2)),MAX)], [('b',(SUBQ(2)),(SUBQ(2)),'A'), ('b',(SUBQ(2)),(SUBQ(2)),MAX)] 注 使用するインデクスの構成列がC1,C2,C3,C4の場合です。
定数を使用して絞り込む場合に値を表示します。定数の表示形式については,マニュアル「HiRDB Version 8 SQLリファレンス」を参照してください。
パターン文字列が前方一致となるLIKE述語,又はSIMILAR述語を指定した場合,定数は次の表のように表示します。
表17-3 パターン文字列が前方一致となるLIKE述語,又はSIMILAR述語を指定した場合の表示例,サーチ範囲
列のデータ型 | パターン文字列 | サーチ条件の絞り込み範囲の表示例 | インデクスのサーチ範囲※ |
---|---|---|---|
固定長の場合 (例:char(5)) |
定数 | RANGE(CS-CE) ['abc'00,'abc'ff] (定数を’abc%’とする) 最初に出現する’%’,又は’_’以降を取り除いた文字列に対して,開始値は定義長まで0を,終了値は定義長までfを埋めます。 |
X’6162630000’ 〜X’616263ffff’ |
埋込み変数,又は?パラメタ | RANGE(CS-CE) [<?(1)0>,<?(1)f>] 開始値は0を一つ,終了値はfを一つ埋めます。 |
X’6162630000’ 〜X’616263ffff’ (?パラメタを’abc%’とします) |
|
SQL変数,又はSQLパラメタ(SQL変数名をSQLVARと仮定します) | RANGE(CS-CE) [<SQLVAR0>,<SQLVARf>] 開始値は0を一つ,終了値はfを一つ埋めます。 |
X’6162630000’ 〜X’616263ffff’ (SQL変数を’abc%’とします) |
|
可変長の場合 (例:varchar(5)) |
定数 | RANGE(CS-CE) ['abc','abc'ff] (定数を’abc%’とする) 開始値は最初に出現する’%’又は’_’以降の文字列を取り除いて,終了値は開始値に定義長までfを埋めます。 |
X’616263’ 〜X’616263ffff’ |
埋込み変数,又は?パラメタ | RANGE(CS-CE) [<?(1)>,<?(1)f>] 終了値だけfを一つ埋めます。 |
X’616263’ 〜X’616263ffff’ (?パラメタを’abc%’とします) |
|
SQL変数,又はSQLパラメタ(SQL変数名をSQLVARと仮定します) | RANGE(CS-CE) [<SQLVAR>,<SQLVARf>] 終了値だけfを一つ埋めます。 |
X’616263’ 〜X’616263ffff’ (SQL変数を’abc%’とします) |
注※ 文字コードはaをX’61’,bをX’62’,cをX’63’とします。
埋込み変数,又は?パラメタの場合に表示します。?番号とは,SQL文中にある埋込み変数,又は?パラメタに対して,1を開始値として左から出現順に番号を付けたものです。
パターン文字列が前方一致となるLIKE述語,又はSIMILAR述語を指定した場合,?は表17-3のように表示します。
SQL変数の場合に表示します。
パターン文字列が前方一致となるLIKE述語,又はSIMILAR述語を指定した場合,SQL変数名は表17-3のように表示します。
SQLパラメタの場合に表示します。
トリガSQL文中で新値相関名の列,及び旧値相関名の列を使用している場合,新値相関名の列は「(NEWROW).列名」,旧値相関名の列は「(OLDROW).列名」と表示します。
パターン文字列が前方一致となるLIKE述語,又はSIMILAR述語を指定した場合,SQLパラメタ名は表17-3のように表示します。
USERを使用して絞り込む場合に表示します。
CURRENT_DATEを使用して絞り込む場合に表示します。
CURRENT_TIMEを使用して絞り込む場合に表示します。
CURRENT_TIMESTAMPを使用して絞り込む場合に表示します(P=0,2,4,又は6)。
集合演算を含まない副問合せ結果を使用して絞り込む場合に表示します。( )の中に問合せIDを表示します。
集合演算を含む副問合せ結果を使用して絞り込む場合に表示します。( )の中に問合せIDを表示します。
集合関数を使用して絞り込む場合に表示します。
NULL値を使用して絞り込む場合に表示します。
列を使用して絞り込む場合に表示します。
表名が相関名の場合には,表名の代わりに相関名を( )で囲んで表示します。
制約判定のためにHiRDBが内部的に生成する副問合せ中で,外部キーへの挿入値,又は更新値を使用して絞り込む場合に表示します。
繰返し列(添字は整数)を使用して絞り込む場合に表示します。
表名が相関名の場合には,表名の代わりに相関名を( )で囲んで表示します。
インデクスキー値の中で一番小さい値(文字列の場合には文字コードが一番小さい値)を検索する場合に表示します。
インデクスキー値の中で一番大きい値(文字列の場合には文字コードが一番大きい値)を検索する場合に表示します。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.