結合の最適化
結合操作は、優れたパフォーマンスを達成するために特に注意を必要とする複雑な機能です。 このセクションでは、DB2® for i の結合照会の実施方法、 および Query 最適化プログラムが行う最適化選択方法について説明します。 また、パフォーマンスの問題の回避または解決に役立つ設計に関するヒントおよび技法についても説明します。
- ネストされたループ結合の実施
DB2 for i は、ネストされたループ結合方式を提供します。 この方式では、結合の中のテーブルの処理が順序付けられます。 この順序は、結合順序と呼ばれます。 最後の結合順序の中の最初のテーブルは、1 次テーブルと呼ばれます。 他のテーブルは、2 次テーブルと呼ばれます。 各結合テーブルの位置は、ダイヤルと呼ばれます。 - 結合最適化アルゴリズム
Query 最適化プログラムは、結合列、結合演算子、ローカル行選択、 ダイヤル実施、索引の使用法、および結合照会のダイヤル順序付けを決定する必要があります。 - 結合順序の最適化
SQE 最適化プログラムにより、結合論理ファイルの結合再配列が可能になります。 ただし、CQE が結合論理ファイルを参照する照会を実行する場合には、結合順序は固定されます。 同様に、OPNQRYF JORDER(*FILE) パラメーターが指定されている場合には、結合順序は固定されます。さらに、照会オプション・ファイルの (QAQQINI) FORCE_JOIN_ORDER パラメーターが *YES の場合にも、結合順序は固定されます。 - 全外部結合
全外部結合は、SQE 最適化プログラムによってサポートされています。内部、左外部、または左例外のサポートされた結合タイプに、右外部結合および右例外結合が書き換えられるように、全外部結合も書き換えられます。 - 結合コストの見積もりと索引選択
Query 最適化プログラムは各種の可能なアクセスの選択を比較する際に、数値コスト値を各候補に割り当てる必要があります。 最適化プログラムは、その値を使用して、処理時間が最も少なくて済む実装を判別します。 このコスト計算値は CPU 時間と入出力時間の組み合わせです。 - 推移的閉包の述部
結合照会の場合、Query 最適化プログラムは、追加の選択を生成するために何か特殊な処理を行う場合があります。照会に属する述部セットが、余分な述部を論理的に推論する場合、Query 最適化プログラムは追加の述部を生成します。 その目的は、結合の最適化を行っている間に詳しい情報を提供するためです。 - ルック・アヘッド述部生成 (LPG)
ルック・アヘッド述部生成 (LPG) と呼ばれる推移的閉包の特別なタイプは、結合でコストがかかる場合があります。この場合、最適化プログラムは照会の結果を大きなファクト・テーブルに事前に適用して、結合のランダム入出力を最小化しようとします。 一般に LPG は、星形結合照会と呼ばれる照会のクラスで使用されます。ただし、LPG は任意の結合照会でおそらく使用可能です。 - 2 つ以上のテーブルからデータを選択する場合のパフォーマンスの向上のためのヒント
以下に示すのは、CQE にのみ、さらに、複数のテーブルにアクセスする選択ステートメントに対し、特に適用される提案です。 2 つ以上のテーブルを結合する際に、結合列に関する余分な情報を追加したい 場合があります。 CQE 最適化プログラムは、2 つの列間で推移的閉包述部を生成しません。結合を要求するとき追加情報を最適化プログラムに与えると、結合を行う最善の方法を判別できます。 この追加情報は余分のように見えますが、最適化プログラムにとって役に立つ情報です。 - 照会の複数の結合タイプ
複数の結合タイプ (内部、左辺外部、右辺外部、左辺例外、および右辺例外) は、JOIN 構文を使用して照会の中で指定できます。DB2 for i は、全体の照会について、内部、左辺外部、あるいは左辺例外結合タイプのうちの、1 つの結合タイプしかサポートできません。最適化プログラムは、照会についての全体の結合タイプを決定し、正しいセマンティクスをアーカイブするためにファイルを再配列します。 - 結合照会パフォーマンスの問題の原因
上記で説明した最適化アルゴリズムは、ほとんどの結合照会のパフォーマンスに貢献しますが、いくつかの照会のパフォーマンスを低下させる可能性があります。 - 結合パフォーマンスのヒント
パフォーマンスの良くない結合照会がある場合、または結合照会を使用するアプリケーションを作成する場合は、これらのヒントが役立つことがあります。
親トピック: 照会の処理: 概説