スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

[目次][索引][前へ][次へ]

4.5.11 探索高速化条件の導出

探索高速化条件とは,WHERE句の探索条件,FROM句のON 探索条件から,CNF変換又は条件推移で新たに導出される条件のことをいいます。探索高速化条件を導出すると,検索する行が早い段階で絞り込まれるため,検索性能が向上します。

探索高速化条件を導出する場合,導出の元となる探索条件は残すため,絞り込みに使用できない条件は生成しないで,導出した条件の中で最適な条件だけを生成できます。

探索高速化条件を導出すると,HiRDBがアクセスパス(表の検索方法,結合方法,結合順序など)を決定する場合に,新しく導出した探索高速化条件も考慮して最適化をします。そのため,探索高速化条件を導出すると,アクセスパスは次のように変わることがあります。

なお,複雑な条件から探索高速化条件を導出すると,探索高速化条件を生成する時間,及び実行時の評価時間が長くなるため,SQLによっては性能が低下することがあります。

<この項の構成>
(1) 探索高速化条件の適用範囲
(2) CNF変換での探索高速化条件の導出
(3) 条件推移での探索高速化条件の導出

(1) 探索高速化条件の適用範囲

探索高速化条件を導出するかどうかは,SQL最適化オプション及びSQL拡張最適化オプションの指定値によって変わります。SQL最適化オプション及びSQL拡張最適化オプションと,探索高速化条件の導出の関係を次の表に示します。

表4-18 SQL最適化オプション及びSQL拡張最適化オプションと探索高速化条件の導出の関係

種類 導出元となる条件 導出される条件 SQL最適化オプション及びSQL拡張最適化オプションの指定
探索高速化条件の導出をしない※2 外部サーバに閉じる探索高速化条件だけ導出する※3 探索高速化条件の導出をする※4
CNF変換 1表のORの条件 内部表 1表条件 × × ×
外部表※1 1表条件 × × ×
2表以上にわたるORの条件 内部表 1表条件 ※5 ※5
ORの簡約化で結合条件(列=列)が抜き出せる場合 ※5 ※5
上記以外の2表以上の条件 × × ×
一つの外部サーバに閉じる場合※1 1表条件 × × ×
ORの簡約化で結合条件(列=列)が抜き出せる場合 × ×
上記以外の2表以上の条件 × × ×
複数の外部サーバ,又は外部表と内部表にわたる場合※1 内部表に閉じる場合 1表条件 ※5 ※5
ORの簡約化で結合条件(列=列)が抜き出せる場合 ※5 ※5
上記以外の2表以上の条件 × × ×
1外部サーバに閉じる場合 1表条件 ×
ORの簡約化で結合条件(列=列)が抜き出せる場合 ×
上記以外の2表以上の条件 ×
複数の外部サーバ,又は外部表と内部表にわたる場合 ORの簡約化で結合条件(列=列)が抜き出せる場合 ※5 ※5
上記以外の2表以上の条件 × × ×
条件推移 表A,Bの結合条件と,表Aの条件 表A,Bが内部表 表Bの1表条件 × ×
表A,Bが一つの外部サーバに閉じる場合※1 外部表Bの1表条件 × × ×
表A,Bが複数の外部サーバ,又は外部表と内部表にわたる場合※1 内部表Bの1表条件 × ×
外部表Bの1表条件 ×
表A,Bの結合条件と,表A,Cの結合条件 表A,B,Cが内部表 表B,Cの結合条件 × × ×
表A,B,Cが一つの外部サーバに閉じる場合※1 一つの外部サーバに閉じる表B,Cの結合条件 × × ×
表A,B,Cが複数の外部サーバ,又は外部表と内部表にわたる場合※1 内部表B,Cの結合条件 × × ×
一つの外部サーバに閉じる表B,Cの結合条件 ×
二つの外部サーバ,又は外部表と内部表にわたる表B,Cの結合条件 × × ×

(凡例)
○:探索高速化条件を生成します。
×:探索高速化条件を生成しません。

注 
内部表とは,次のような表を指します。
  • HiRDB External Data Accessを組み込んでいない場合の表
  • HiRDB External Data Accessを組み込んでいる場合で外部表以外の表

注※1
HiRDB External Data Accessを組み込んでいる場合に該当します。

注※2
SQL拡張最適化オプションに「無条件に生成する,外部サーバで実行できる探索高速化条件の導出の抑止」を指定します。なお,同時にSQL最適化オプションに「探索高速化条件の導出」を指定すると,「無条件に生成する,外部サーバで実行できる探索高速化条件の導出の抑止」は無効となります。

注※3
SQL拡張最適化オプションに「無条件に生成する,外部サーバで実行できる探索高速化条件の導出の抑止」を,SQL最適化オプションに「探索高速化条件の導出」を,共に指定しません。

注※4
SQL最適化オプションに「探索高速化条件の導出」を指定します。

注※5
探索高速化条件の導出元の検索に直積が指定されている場合,探索高速化条件を生成しますが,次に示す条件によって異なります。探索高速化条件の導出の可否とその条件を次に示します。
導出元の検索 導出の条件 内部表に閉じて導出される探索高速化条件 導出可否
2表検索 直積となる ORの簡約化によって結合条件(列=列)が抜き出せない場合 導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合 なし ×
導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合 1表条件
結合条件(列=列)
上記以外の2表条件 ×
ORの簡約化によって結合条件(列=列)が抜き出せる場合 導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合 なし ×
導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合 1表条件
結合条件(列=列)
上記以外の2表条件 ×
直積とならない ×
3表以上の検索 すべて直積となる ORの簡約化によって結合条件(列=列)が抜き出せない場合 導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合 なし ×
導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合 1表条件
結合条件(列=列)
上記以外の2表条件 ×
一部がORの簡約化によって結合条件(列=列)が抜き出せる場合 導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合 なし ×
導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合 1表条件
結合条件(列=列)
上記以外の2表条件 ×
ORの簡約化によって結合条件(列=列)が抜き出せる場合 導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合 なし ×
導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合 1表条件
結合条件(列=列)
上記以外の2表条件 ×
一部が直積,その他が直積にならない ORの簡約化によって結合条件(列=列)が抜き出せない場合 導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合 なし ×
導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合 1表条件
結合条件(列=列)
上記以外の2表条件 ×
一部がORの簡約化によって結合条件(列=列)が抜き出せる場合 導出元の探索条件に導出する1表条件と同じ表の1表条件がある場合 なし ×
導出元の探索条件に導出する1表条件と同じ表の1表条件がない場合 1表条件
結合条件(列=列)
上記以外の2表条件 ×
ORの簡約化によって結合条件(列=列)が抜き出せる場合 導出元の探索条件に導出する2表条件と同じ表の1表条件がある場合 なし ×
導出元の探索条件に導出する2表条件と同じ表の1表条件がない場合 1表条件
結合条件(列=列)
上記以外の2表条件 ×
直積とならない ×

(凡例)
○:導出する
×:導出しない
−:該当しない

(2) CNF変換での探索高速化条件の導出

CNF変換とは,ORで結合した条件(DNF形式(Disjunctive Normal Form:選言標準形))を,ANDで結合された等価な条件(CNF形式(Conjunctive Normal Form:連言標準形))に変換することをいいます。WHERE句の探索条件,及びFROM句のON 探索条件に対してCNF変換をすることで,探索高速化条件を導出します。

(a) CNF変換で導出される探索条件

CNF変換で導出される探索条件を次に示します。

なお,SQL最適化オプション及びSQL拡張最適化オプションの指定によって,探索高速化条件を導出するかどうかが決まります。SQL最適化オプション及びSQL拡張最適化オプションと,探索高速化条件の導出の関係については,「(1) 探索高速化条件の適用範囲」を参照してください。

(b) CNF変換をしない条件

次のどれかに該当する場合,CNF変換での探索高速化条件の導出はしません。

(3) 条件推移での探索高速化条件の導出

条件推移とは,二つ以上の条件から新たな条件を導き出すことをいいます。

条件推移で導出される探索条件を次に示します。

なお,SQL最適化オプション及びSQL拡張最適化オプションの指定によって,探索高速化条件を導出するかどうかが決まります。SQL最適化オプション及びSQL拡張最適化オプションと,探索高速化条件の導出の関係については,「(1) 探索高速化条件の適用範囲」を参照してください。

(a) 結合条件を介した1表条件の推移による探索高速化条件の導出

2表の結合条件(列=列だけ)と,結合列を含む1表条件がある場合に,結合相手の列に対して1表条件を導出します。例を次に示します。

 
T1.C1 = T2.C1 AND T1.C1 > 10
→T1.C1 = T2.C1 AND T1.C1 > 10 AND T2.C1 > 10
 
下線部分が,導出した探索高速化条件となります。
 
(b) 結合条件の推移での探索高速化条件の導出(UNIX版限定)

2表の結合条件(列=列だけ)と,どちらか片方の列と別の表の列との結合条件(列=列だけ)がある場合に,結合条件がない列同士から新たな結合条件を導出します。相関名の指定がある場合は,相関名が異なれば別の表とみなします。例を次に示します。

 
T1.C1 = T2.C1 AND T2.C1 = T3.C1
→T1.C1 = T2.C1 AND T2.C1 = T3.C1 AND T1.C1 = T3.C1
 
下線部分が,導出した探索高速化条件となります。