17.5.11 サーチ条件
- 〈この項の構成〉
(1) サーチ条件の概要
- SearchCnd:サーチ条件の種別 [絞り込み範囲],…
-
サーチ条件とは,インデクスのサーチ範囲を決定する条件です。
(a) サーチ条件を持つ場合
- 例) where C1 between 'a' and 'z'
注 使用するインデクスの構成列がC1の場合です。
(b) 実行時にサーチ条件が削除される場合
パターン文字列に,埋込み変数,?パラメタ,SQL変数,SQLパラメタを持つLIKE述語,又はSIMILAR述語を指定すると,実行時に与えられるパターン文字列が’abc%’のように前方一致となる場合にはインデクスのサーチ範囲を絞り込めます。しかし,’%abc’のように前方一致以外の場合には,インデクスのサーチ範囲を絞り込めなくなります。
このように,実行時に与えられるパターン文字列の値によって,インデクスのサーチ範囲が絞り込めなくなる場合に,インデクスの絞り込み開始値,終了値を< >で囲んで表示します。
- 例) where C1 LIKE ? (C1のデータ型:CHAR(5))
注 使用するインデクスの構成列がC1の場合です。
- [説明]
-
-
?が’abc%’の場合,X’6162630000’〜X’616263ffff’の範囲を検索します。
文字コードは,aをX’61’,bをX’62’,cをX’63’とします。
-
?が’%abc’の場合,インデクスの全範囲をサーチします。
-
?(1)の番号は?番号を表します。?番号については「絞り込み範囲に使用する値」を参照してください。
-
(2) 探索条件のサーチ条件種別
各サーチ条件種別に該当する探索条件を次の表に示します。
サーチ条件種別 |
特長 |
サーチ条件種別を作成するための条件 |
|
---|---|---|---|
単一列インデクス |
複数列インデクス |
||
IS NULL |
NULL値のキーが少ない場合に有効です。 |
すべてのインデクス構成列にNULL述語(IS NULL)があります。 |
|
IS NOT NULL |
NULL値以外のキーが少ない場合に有効です。 |
インデクス構成列にNULL述語(IS NOT NULL)があります。 |
作成しません。 |
IS TRUE |
プラグイン提供関数によって異なります。 |
プラグイン提供関数の実行結果に対する,論理述語(IS TRUE)を使用した判定があります。 |
作成しません。 |
IS TRUE (AND) |
プラグイン提供関数によって異なります。 |
プラグイン提供関数の実行結果に対する,論理述語(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となる場合を除きます。 |
- 注※1
-
複数インデクスを利用する場合でも,SQL最適化モードがコストベース最適化モード2のときは,IN(表副問合せ),=ANY(表副問合せ),及び=SOME(表副問合せ)は,1列だけをサーチ範囲の絞り込みに使用します。また,複数列インデクスを利用する場合,SQL最適化モードがコストベース最適化モード1のときは,IN(表副問合せ),=ANY(表副問合せ),及び=SOME(表副問合せ)は,サーチ範囲の絞り込みに使用しません。
- 注※2
-
絞り込み値の個数は,IN(行値構成子)では行値構成子の個数となります。また,IN(表副問合せ),=ANY(表副問合せ),及び=SOME(表副問合せ)では44となります。絞り込み値の個数の組み合わせ数によるサーチ条件の分類については,表「絞り込み値の個数の組み合わせ数によるサーチ条件の分類」を参照してください。
- 注※3
-
すべての行値構成子の行値構成子要素が値指定,スカラ副問合せ,又は行副問合せの場合に限ります。
絞り込み値の個数の組み合わせ数によるサーチ条件の分類について,次の表に示します。
指定条件 |
絞り込み値の個数の組み合わせ |
サーチ条件種別 |
|
---|---|---|---|
インデクス構成列の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 |
(a) IS NULL
IS NULLは,インデクスのNULLの範囲を検索します。
注 使用するインデクスの構成列がC1の場合です。
例) where C1 IS NULL → SearchCnd:IS NULL
(b) IS NOT NULL
IS NOT NULLは,インデクスのNULL以外の範囲を検索します。
注 使用するインデクスの構成列がC1の場合です。
例) where C1 IS NOT NULL → SearchCnd:IS NOT NULL
(c) IS TRUE
IS TRUEは,プラグインインデクスを使用した検索の場合に表示します。
-
FULL SCAN TYPEプラグイン提供関数の場合
注 使用するインデクスの構成列がfeatureの場合です。
例) where SearchImageData (feature,? as blob(1M),? as varchar(1024)) IS TRUE → SearchCnd:IS TRUE
-
FULL SCAN TYPEプラグイン提供関数以外の場合
注 使用するインデクスの構成列がSENTENCESの場合です。
例) where Contains (SENTENCES,'添付文書データ[効能{"食あたり"}]') IS TRUE → SearchCnd:IS TRUE
(d) IS TRUE (AND)
IS TRUE (AND)は,プラグインインデクスを使用した条件の絞り込み時に,ほかのインデクスを使用した条件による絞り込み結果の行識別子集合を利用する場合に表示します。
- 注 使用するインデクスの構成列がSENTENCESの場合です。
例) where C1 = 'a' AND Contains (SENTENCES,'添付文書データ[効能{"食あたり"}]') IS TRUE → 下線部分がSearchCnd:IS TRUE (AND)
詳細については「HiRDB Version 9 UAP開発ガイド」の「プラグインインデクスでの他インデクス絞り込み結果利用機能」を参照してください。
(e) AT
-
サーチ条件種別
- AT [絞り込み値]:
-
ATは,インデクスからある値をサーチする場合に使用します。
探索条件は,C1='a',C1=(Select C1 from T2)などです。
- 注 使用するインデクスの構成列がC1の場合です。
例) where C1='a' → SearchCnd:AT ['a']
-
絞り込み値
- 単一列インデクスのAT
-
- AT [値]:
-
単一列インデクスの場合に値を表示します。
例) where C1='a' → SearchCnd:AT ['a']
注 使用するインデクスの構成列がC1の場合です。
- 複数列インデクスのAT
-
- AT [(値,…,値)]:
-
複数列インデクスの場合に,値をインデクス構成列の先頭から順にコンマ(,)で区切り,全体を( )で囲んで表示します。
例1) where C1='a' and C2='A' → SearchCnd:AT [('a','A')]
注 使用するインデクスの構成列がC1,C2の場合です。
例2) where (C1,C2) in (('a','A')) → SearchCnd:AT [('a','A')]
注 使用するインデクスの構成列がC1,C2の場合です。
例3) where (C1,C2) = ((select C1 from T2),(select C2 from T3)) → SearchCnd:AT [((SUBQ(2)),(SUBQ(3)))]
注 使用するインデクスの構成列がC1,C2の場合です。
例4) where array(C1,C2) [any] ((C1,C2)=('a','A')) → SearchCnd:AT [('a','A')]
注 使用するインデクスの構成列がC1,C2の場合です。
(f) RANGE
-
サーチ条件種別
RANGEは,インデクスの絞り込み開始値から終了値までの範囲をサーチする場合に使用します。絞り込み範囲に開始値が含まれるかどうか,終了値が含まれるかどうかによって,RANGEには次の1〜4の分類があります。これらは,RANGE(...)の"..."部分に表示します。
-
絞り込み開始値,絞り込み終了値共に含む
- RANGE(CS-CE) [絞り込み開始値,絞り込み終了値]:
-
探索条件は,C1>='a' and C1<='z',C1 between 'a' and 'z',C1 like 'a%'などです。
例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の場合です。
-
絞り込み開始値は含むが,絞り込み終了値は含まない
- RANGE(CS-OE) [絞り込み開始値,絞り込み終了値]:
-
探索条件は,C1>='a' and C1 < 'z'などです。
例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の場合です。
-
絞り込み開始値は含まないが,絞り込み終了値は含む
- RANGE(OS-CE) [絞り込み開始値,絞り込み終了値]:
-
探索条件は,C1>'a' and C1<='z'などです。
例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の場合です。
-
絞り込み開始値,絞り込み終了値共に含まない
- RANGE(OS-OE) [絞り込み開始値,絞り込み終了値]:
-
探索条件は,C1>'a' and C1<'z'などです。
例) where C1 > 'a' and C1 < 'z' → SearchCnd:RANGE(OS-OE) ['a','z'] 注 使用するインデクスの構成列がC1の場合です。
-
絞り込み範囲(絞り込み開始値,絞り込み終了値)
- 単一列インデクスのRANGE
-
- RANGE( … ) [値,値]:
-
単一列インデクスの場合,絞り込む範囲の開始位置,終了位置をコンマ(,)で区切って表示します。RANGE( … )の"…"の箇所はサーチ条件種別によって異なります。
例) where C1 between 'a' and 'z' → SearchCnd:RANGE(CS-CE) ['a','z'] 注 使用するインデクスの構成列がC1の場合です。
- 複数列インデクスのRANGE
-
- RANGE( … ) [(値,…,値),(値,…,値)]:
-
複数列インデクスの場合,開始位置,終了位置それぞれに対して,インデクス構成列の先頭から順にコンマ(,)で区切って,全体を( )で囲みます。さらに,開始位置,終了位置をコンマで区切って表示します。RANGE( … )の"…"の箇所はサーチ条件種別によって異なります。
例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の場合です。
(g) ATS
-
サーチ条件種別
- 複数の絞り込み値によるATS
-
ATS [絞り込み値], ... ,[絞り込み値]:
- ATS [絞り込み値], ... ,[絞り込み値],...(Number of All Row Values : n)...,[絞り込み値]:
-
絞り込み値を使用して,インデクスを複数回サーチする場合に使用します。
探索条件は,C1 in ('a','b','c')などです。
絞り込み値の総数が256個以上の場合,「...(Number of All Row Values : n)...」を表示します。nは絞り込み値の総数です。
なお,「...(Number of All Row Values : n)...」の...は,省略を示すものではありません。
例) where C1 in ('a','b','c') → SearchCnd:ATS ['a'],['b'],['c'] 注 使用するインデクスの構成列がC1の場合です。
- 絞り込み値の集合によるATS
-
- ATS [絞り込み値の集合]:
-
絞り込み値の集合(表副問合せから作成される作業表)を使用して,インデクスを複数回サーチする場合に使用します。
探索条件は,C1=any(Select C1 from T2),C1=some(Select C1 from T2),C1 in (Select C1 from T2)などです。
例) where C1 =any(select C1 from T2) → SearchCnd:ATS [(SUBQ(2))] 注 使用するインデクスの構成列がC1の場合です。
- 複数の絞り込み値の集合によるATS
-
ATS [絞り込み値の集合], ... ,[絞り込み値の集合]:
- ATS [絞り込み値の集合], ... ,[絞り込み値の集合],...(Number of All Row Values : n)...,[絞り込み値の集合]:
-
絞り込み値の集合(表副問合せから作成される作業表)とIN述語を組み合わせた結果を使用して,インデクスを複数回サーチする場合に使用します。
探索条件は,C1 in ('a','b','c') and C2=any(Select C1 from T2)などです。
絞り込み値の集合の総数が256個以上の場合,「...(Number of All Row Values : n)...」を表示します。nは絞り込み値の集合の総数です。
なお,「...(Number of All Row Values : n)...」の...は,省略を示すものではありません。
例) 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の場合です。
-
絞り込み値,又は絞り込み値の集合
- 複数の絞り込み値による単一列インデクスのATS
-
ATS [値], ... ,[値]:
- ATS [値], ... ,[値],...(Number of All Row Values : n)...,[値]:
-
値を","で区切って表示します。
絞り込み値の総数が256個以上の場合,「...(Number of All Row Values : n)...」を表示します。nは絞り込み値の総数です。
なお,「...(Number of All Row Values : n)...」の...は,省略を示すものではありません。
例) where C1 in ('a','b','c') → SearchCnd:ATS ['a'],['b'],['c'] 注 使用するインデクスの構成列がC1の場合です。
- 絞り込み値の集合による単一列インデクスのATS
-
- ATS [(SUBQ(問合せID))又は(SUBQEX(問合せ式本体ID))]:
-
表副問合せの問合せID,又は問合せ式本体IDを表示します。
例) where C1 =any(select C1 from T2) → SearchCnd:ATS [(SUBQ(2))] 注 使用するインデクスの構成列がC1の場合です。
- 複数の絞り込み値による複数列インデクスのATS
-
ATS [(値,...,値)], ... ,[(値,...,値)]:
- ATS [(値,...,値)], ... ,[(値,...,値)],...(Number of All Row Values : n)...,[(値,...,値):
-
複数列インデクスの場合,値をインデクス構成列の先頭から順に","で区切り,全体を"(",")"で囲んだものが一つの絞り込み値となります。この絞り込み値を","で区切って,複数の絞り込み値を表示します。
絞り込み値の総数が256個以上の場合,「...(Number of All Row Values : n)...」を表示します。nは絞り込み値の総数です。
なお,「...(Number of All Row Values : n)...」の...は,省略を示すものではありません。
例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の場合です。
- 絞り込み値の集合による複数列インデクスのATS
-
- ATS [(値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)),...,値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)))]:
-
複数列インデクスの場合,値又は表副問合せの問合せIDをインデクス構成列の先頭から順に","で区切り,全体を"(",")"で囲んだものが絞り込み値の集合となります。
例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の場合です。
- 複数の絞り込み値の集合による複数列インデクスのATS
-
ATS [(値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)),...,値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)))]
, ... ,[(値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)),...,値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)))]:
ATS [(値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)),...,値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)))]
, ... ,[(値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)),...,値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)))]
,...(Number of All Row Values : n)...
- , [(値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)),...,値,(SUBQ(問合せID)),又は(SUBQEX(問合せ式本体ID)))]:
-
複数列インデクスの場合,値又は表副問合せの問合せIDをインデクス構成列の先頭から順に","で区切り,全体を"(",")"で囲んだものが一つの絞り込み値の集合となります。この絞り込み値の集合を","で区切って,複数の絞り込み値の集合を表示します。
絞り込み値の総数が256個以上の場合,「...(Number of All Row Values : n)...」を表示します。nは絞り込み値の集合の総数です。
なお,「...(Number of All Row Values : n)...」の...は,省略を示すものではありません。
例) 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の場合です。
(h) RANGES
-
サーチ条件種別
RANGESは,複数列インデクスにだけ適用されます。インデクスの絞り込み開始値から終了値までの範囲を,複数回サーチする場合に使用します。
絞り込み範囲に開始値が含まれるかどうか,終了値が含まれるかどうかによって,RANGESには次の1〜3の分類があります。これらは,RANGES(...)の"..."部分に表示します。
-
複数の絞り込み範囲によるRANGES
RANGES(...) [絞り込み開始値,絞り込み終了値], ... ,[絞り込み開始値,絞り込み終了値]:
- RANGES(...) [絞り込み開始値,絞り込み終了値], ... ,[絞り込み開始値,絞り込み終了値],...(Number of All Row Values : n)...,[絞り込み開始値,絞り込み終了値]:
-
絞り込み範囲を使用して,インデクスを複数回サーチする場合に使用します。
探索条件は,C1 in ('a','b','c') and C2 between 'A' and 'Z',C1 in ('a','b','c')などです。
絞り込み値の総数が256個以上の場合,「...(Number of All Row Values : n)...」を表示します。nは絞り込み範囲の総数です。
なお,「...(Number of All Row Values : n)...」の...は,省略を示すものではありません。
例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の場合です。
-
絞り込み範囲の集合によるRANGES
- RANGES(...) [絞り込み開始値の集合,絞り込み終了値の集合]:
-
絞り込み範囲の集合(表副問合せから作成される作業表)を使用して,インデクスを複数回サーチする場合に使用します。
探索条件は,C1 =any(select C1 from T2)などです。
例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の場合です。
-
複数の絞り込み範囲の集合によるRANGES
RANGES(...) [絞り込み開始値又は絞り込み開始値の集合,絞り込み終了値又は絞り込み終了値の集合], ... ,[絞り込み開始値又は絞り込み開始値の集合,絞り込み終了値又は絞り込み終了値の集合]:
- RANGES(...) [絞り込み開始値又は絞り込み開始値の集合,絞り込み終了値又は絞り込み終了値の集合], ... ,[絞り込み開始値又は絞り込み開始値の集合,絞り込み終了値又は絞り込み終了値の集合],...(Number of All Row Values : n)...,[絞り込み開始値又は絞り込み開始値の集合,絞り込み終了値又は絞り込み終了値の集合]:
-
絞り込み範囲の集合(表副問合せから作成される作業表)とIN述語を組み合わせた結果を使用して,インデクスを複数回サーチする場合に使用します。
探索条件は,C1 in ('a','b','c') and C2=any(Select C1 from T2)などです。
絞り込み値の総数が256個以上の場合,「...(Number of All Row Values : n)...」を表示します。nは絞り込み範囲の集合の総数です。
なお,「...(Number of All Row Values : n)...」の...は,省略を示すものではありません。
例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の場合です。
(3) 絞り込み範囲に使用する値
(a) 定数
定数を使用して絞り込む場合に値を表示します。定数の表示形式については,マニュアル「HiRDB Version 9 SQLリファレンス」を参照してください。
パターン文字列が前方一致となる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%’とします) |
(b) ?(?番号)
埋込み変数,又は?パラメタの場合に表示します。?番号とは,SQL文中にある埋込み変数,又は?パラメタに対して,1を開始値として左から出現順に番号を付けたものです。
パターン文字列が前方一致となるLIKE述語,又はSIMILAR述語を指定した場合,?は表「パターン文字列が前方一致となるLIKE述語,又はSIMILAR述語を指定した場合の表示例,サーチ範囲」のように表示します。
(c) SQL変数名
SQL変数の場合に表示します。
パターン文字列が前方一致となるLIKE述語,又はSIMILAR述語を指定した場合,SQL変数名は表「パターン文字列が前方一致となるLIKE述語,又はSIMILAR述語を指定した場合の表示例,サーチ範囲」のように表示します。
(d) SQLパラメタ名
SQLパラメタの場合に表示します。
トリガSQL文中で新値相関名の列,及び旧値相関名の列を使用している場合,新値相関名の列は「(NEWROW).列名」,旧値相関名の列は「(OLDROW).列名」と表示します。
パターン文字列が前方一致となるLIKE述語,又はSIMILAR述語を指定した場合,SQLパラメタ名は表「パターン文字列が前方一致となるLIKE述語,又はSIMILAR述語を指定した場合の表示例,サーチ範囲」のように表示します。
(e) USER
USER値関数を使用して絞り込む場合に表示します。
(f) CURRENT_DATE
CURRENT_DATE値関数を使用して絞り込む場合に表示します。
(g) CURRENT_TIME
CURRENT_TIME値関数を使用して絞り込む場合に表示します。
(h) CURRENT_TIMESTAMP(p)
CURRENT_TIMESTAMP値関数を使用して絞り込む場合に表示します(P=0,2,4,又は6)。
(i) SUBQ(問合せID)
集合演算を含まない副問合せ結果を使用して絞り込む場合に表示します。( )の中に問合せIDを表示します。
(j) SUBQEX(問合せ式本体ID)
集合演算を含む副問合せ結果を使用して絞り込む場合に表示します。( )の中に問合せIDを表示します。
(k) 集合関数
集合関数を使用して絞り込む場合に表示します。
(l) NULL
NULL値を使用して絞り込む場合に表示します。
(m) 表名.列名
列を使用して絞り込む場合に表示します。
表名が相関名の場合には,表名の代わりに相関名を( )で囲んで表示します。
(n) (NEW ROW).列名
制約判定のためにHiRDBが内部的に生成する副問合せ中で,外部キーへの挿入値,又は更新値を使用して絞り込む場合に表示します。
(o) 表名.列名[添字]
繰返し列(添字は整数)を使用して絞り込む場合に表示します。
表名が相関名の場合には,表名の代わりに相関名を( )で囲んで表示します。
(p) MIN
インデクスキー値の中で一番小さい値(文字列の場合には文字コードが一番小さい値)を検索する場合に表示します。
(q) MAX
インデクスキー値の中で一番大きい値(文字列の場合には文字コードが一番大きい値)を検索する場合に表示します。