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

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

4.5.1 SQL最適化モード

<この項の構成>
(1) SQL最適化モードの特徴
(2) 強制的にコストベース最適化モード2を適用するSQL
(3) SQL最適化オプション,SQL拡張最適化オプションの有効範囲
(4) 最適化処理で選択されたSQL最適化モードを確認する方法
(5) 注意事項

(1) SQL最適化モードの特徴

SQL最適化モードの特徴を次の表に示します。

表4-5 SQL最適化モードの特徴

SQL最適化モード 説明 長所 短所 選択方法
コストベース最適化モード1 バージョン06-00より前のHiRDBのコストベース最適化処理方式です。バージョン06-00以降のHiRDBでも使用できます。 バージョン06-00より前のHiRDBからバージョンアップしても,バージョンアップ前と同じアクセスパスで検索できます。
なお,高速に検索する目的として,アクセスパスを変更することもあります。
候補とするアクセスパスの種類が少ないため(ハッシュジョインなどの機能を候補として選択しません),必ずしも最適なアクセスパスが選択されるとは限りません。 SQL拡張最適化オプションを指定しないか,又はSQL拡張最適化オプションのコストベース最適化モード2の適用の指定を外します。
なお,SQL文によっては,常にコストベース最適化モード2を使用する場合があります。詳細については,「(2) 強制的にコストベース最適化モード2を適用するSQL」を参照してください。
コストベース最適化モード2 バージョン06-00以降のHiRDBで,高速に検索できるようにしたコストベース最適化処理方式です。 結合検索,副問合せ処理に対して,ハッシングを組み合わせたアクセスパスを候補として選択するため,高速に検索できます。 複雑な最適化処理をするため,最適化処理に時間が掛かります。 SQL拡張最適化オプションにコストベース最適化モード2の適用を指定します。

 

(2) 強制的にコストベース最適化モード2を適用するSQL

コストベース最適化モード1を使用していても,コストベース最適化モード2が強制的に適用される場合があります。強制的にコストベース最適化モード2が適用されるSQLを次に示します。

それぞれのSQLに該当する適用条件及び例を次に示します。

(a) UPDATE文のSET句での副問合せ
(b) Outer Join+(Inner) Join
(c) 集合演算結果のCOUNT(*)
(d) DISTINCT集合関数の値式
(e) ビュー表,WITH句の問合せ名の外結合(OUTER JOIN)への指定
(f) BLOBデータ,BINARYデータの部分的な更新・検索
(g) HiRDB External Data Access機能
(h) SQL最適化指定
(i) 定義長が255バイトを超える値式のソート
(j) 先頭からn行の検索結果を取得する機能
(k) BINARY型を使用した検索
(l) 内部導出表が2段以上入れ子になるビュー表,WITH句の検索
(m) マトリクス分割
(n) 結合表に対する副問合せ
(o) 繰返し列での集合関数MIN,MAX適用
(p) 行値構成子
(q) CASE式中の副問合せ
(r) 値式2がBLOB型のスカラ関数POSITION
(s) 参照制約
(t) 検査制約
(u) 定義長256バイト以上のデータの制限解除
(v) 更新,削除,又は追加をする表の副問合せへの指定
(w) FROM句での繰返し列の平坦化機能
(x) LIMIT句
(y) 内部導出表が2段以上入れ子になる検索
(z) 問合せ式本体の指定箇所拡大
(aa) ウィンドウ関数
(ab) SIMILAR述語
(ac) XML型を使用した検索
(ad) 文字集合
(ae) RDエリア名を指定した検索,更新,又は削除

(3) SQL最適化オプション,SQL拡張最適化オプションの有効範囲

SQL最適化オプション,SQL拡張最適化オプションが有効となるSQL最適化モードを次の表に示します。

表4-6 SQL最適化オプション,SQL拡張最適化オプションが有効となるSQL最適化モード

SQL最適化モード SQL最適化オプション SQL拡張最適化オプション
コストベース最適化モード1 ×
コストベース最適化モード2

(凡例)
○:有効となります。
×:無効となります。

(4) 最適化処理で選択されたSQL最適化モードを確認する方法

アクセスパス表示ユティリティを使用すると,SQL文ごとに最適化処理で選択されたSQL最適化モードを確認できます。アクセスパス表示ユティリティについては,マニュアル「HiRDB Version 8 コマンドリファレンス」を参照してください。

(5) 注意事項

  1. SQL最適化モードを変更すると,アクセスパスが変更になるため,SQL文の検索性能が低下することがあります。本番運用などで十分に性能評価ができない環境では,SQL最適化モードを変更しないことをお勧めします。
  2. HiRDBを新規導入する場合,コストベース最適化モード2を使用することをお勧めします。また,ほかのSQL拡張最適化オプションを使用する場合は,コストベース最適化モード2に追加する形で使用してください。コストベース最適化モード2を使用すると,最適化処理で選択できるアクセスパスの種類が多いため,より高速に検索できるアクセスパスを選択できます。
    なお,HiRDBシステム定義のpd_additional_optimize_levelオペランドの省略値はコストベース最適化モード2のため,通常はコストベース最適化モード2が適用されます。また,簡易セットアップツール,システムジェネレータ,SPSetup.bat,又はHiRDEFなどの環境設定支援ツールを使用してHiRDBの環境設定をした場合も,コストベース最適化モード2が適用されます。
  3. バージョン06-00より前のHiRDBからバージョンアップする場合,バージョンアップ前と同じ状態で使用するためにコストベース最適化モード1をそのまま使用することをお勧めします。ただし,SQL文によっては,常にコストベース最適化モード2を使用することがあります。
  4. 通常は絞り込み条件を考慮して最適化をしますが,SQL拡張最適化オプションにハッシュジョイン,副問合せのハッシュ実行を適用した場合,絞り込み条件がなかったり,絞り込み条件で行数があまり絞り込めなかったりすると,行数の多い表を内表にしたハッシュジョインを適用したり,行数の多い表の転送が発生したりします。このような場合は,表の行数の情報を最適化に反映させるために,必要に応じて次のどちらかの方法で最適化情報収集ユティリティを実行してください。最適化情報収集ユティリティの実行要否については,マニュアル「HiRDB Version 8 コマンドリファレンス」を参照し,性能について十分に検証するようにしてください。
    • 表にデータを格納した状態で,最適化情報収集レベルをlvl1にして(-cオプションにlvl1を指定して)実行します。lvl1では,表の行数の情報だけを取得するため,比較的短時間で最適化情報収集ユティリティを実行できます。また,-tオプションにALLを指定すると,スキーマ内のすべての表に対して行数を取得できます。
    • 表にデータを格納できない場合や,テスト環境の場合は,本番環境での表の行数(NROWS)を最適化パラメタファイルに記述して,表ごとに-sオプションを指定して実行します。表の行数を1,000行にする場合の最適化パラメタファイルの記述例を次に示します。
      # 表最適化情報
      NROWS 1000 # 表の全行数
  5. コストベース最適化モード1を使用する場合,通常は最適化情報収集ユティリティを実行する必要はありませんが,実行するときは最適化情報収集レベルはlvl1にしないでください。