スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
探索高速化条件とは,WHERE句の探索条件,FROM句のON 探索条件から,CNF変換又は条件推移で新たに導出される条件のことをいいます。探索高速化条件を導出すると,検索する行が早い段階で絞り込まれるため,検索性能が向上します。
探索高速化条件を導出する場合,導出の元となる探索条件は残すため,絞り込みに使用できない条件は生成しないで,導出した条件の中で最適な条件だけを生成できます。
探索高速化条件を導出すると,HiRDBがアクセスパス(表の検索方法,結合方法,結合順序など)を決定する場合に,新しく導出した探索高速化条件も考慮して最適化をします。そのため,探索高速化条件を導出すると,アクセスパスは次のように変わることがあります。
なお,複雑な条件から探索高速化条件を導出すると,探索高速化条件を生成する時間,及び実行時の評価時間が長くなるため,SQLによっては性能が低下することがあります。
探索高速化条件を導出するかどうかは,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の結合条件 | × | × | × |
導出元の検索 | 導出の条件 | 内部表に閉じて導出される探索高速化条件 | 導出可否 | ||
---|---|---|---|---|---|
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表条件 | × | ||||
直積とならない | − | × |
CNF変換とは,ORで結合した条件(DNF形式(Disjunctive Normal Form:選言標準形))を,ANDで結合された等価な条件(CNF形式(Conjunctive Normal Form:連言標準形))に変換することをいいます。WHERE句の探索条件,及びFROM句のON 探索条件に対してCNF変換をすることで,探索高速化条件を導出します。
CNF変換で導出される探索条件を次に示します。
なお,SQL最適化オプション及びSQL拡張最適化オプションの指定によって,探索高速化条件を導出するかどうかが決まります。SQL最適化オプション及びSQL拡張最適化オプションと,探索高速化条件の導出の関係については,「(1) 探索高速化条件の適用範囲」を参照してください。
次のどれかに該当する場合,CNF変換での探索高速化条件の導出はしません。
条件推移とは,二つ以上の条件から新たな条件を導き出すことをいいます。
条件推移で導出される探索条件を次に示します。
なお,SQL最適化オプション及びSQL拡張最適化オプションの指定によって,探索高速化条件を導出するかどうかが決まります。SQL最適化オプション及びSQL拡張最適化オプションと,探索高速化条件の導出の関係については,「(1) 探索高速化条件の適用範囲」を参照してください。
2表の結合条件(列=列だけ)と,結合列を含む1表条件がある場合に,結合相手の列に対して1表条件を導出します。例を次に示します。
T1.C1 = T2.C1 AND T1.C1 > 10 →T1.C1 = T2.C1 AND T1.C1 > 10 AND T2.C1 > 10 下線部分が,導出した探索高速化条件となります。
2表の結合条件(列=列だけ)と,どちらか片方の列と別の表の列との結合条件(列=列だけ)がある場合に,結合条件がない列同士から新たな結合条件を導出します。相関名の指定がある場合は,相関名が異なれば別の表とみなします。例を次に示します。
T1.C1 = T2.C1 AND T2.C1 = T3.C1 →T1.C1 = T2.C1 AND T2.C1 = T3.C1 AND T1.C1 = T3.C1 下線部分が,導出した探索高速化条件となります。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.