スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
結合方式の種類及び特徴(直積を除く)を次の表に示します。この表にある結合方式を適用できなかった場合は,直積が適用されます。
表4-10 結合方式の種類及び特徴
結合方式 | 処理方式 | 初回のデータ取り出し | 長所 | 短所 |
---|---|---|---|---|
マージジョイン | 結合列でソートして,結合列の値が小さいものから順に突き合わせ処理をします。 | 遅い | ヒット件数の多い表同士でも,少ないメモリで結合できるので,ほかの方式に比べて性能劣化が少ないです。 また,結合列のデータがソート済みで,マージジョインのためのソート処理をキャンセルできる場合は,高速に検索できます。 |
結合する列のデータがソートされていない場合,ソート処理の負荷が高くなり,性能が悪くなります。 |
ネストループジョイン | 外表の結合列の値を使用して,内表の結合列に定義されているインデクスをサーチして,突き合わせを入れ子にしたものを繰り返して処理します。 | 速い | 内表を結合列に指定したインデクスで絞り込める場合,高速に検索できます。 | 外表から行を1件取り出すごとに,インデクスを使用して内表を検索するため,外表のヒット件数が多い場合は性能が悪くなります。 |
ハッシュジョイン | 内表の結合列からハッシュ表を作成し,外表の結合列をハッシングして内表から作成したハッシュ表と突き合わせ処理をします。 | 内表のヒット件数が少ない場合は速い(ネストループジョインよりは遅く,マージジョインよりは速い) | 内表のヒット件数が少なく,外表のヒット件数が多い場合,高速に検索できます。 | 内表のヒット件数が多い場合は使用するメモリが多くなります。また,メモリを使用できなくなった分については,いったんファイルに退避するため,性能が悪くなります。 |
SELECT-APSL | ?パラメタを含んだ条件がある場合,あらかじめ結合方法の候補を複数作成しておいて,?パラメタの値を入力した時点で最適な検索方法を決定します。 | 実際に選択された検索方法によって異なる | ?パラメタの値を入力する時点で,最適な検索方法を選択できます。 | 最適化情報収集ユティリティ(pdgetcst)を実行しておく必要があります。※ また,複数の結合方法の候補を作成するため,SQLオブジェクトのサイズが大きくなります。 |
分散ネストループジョイン | 外表の結合列の値を使用して,内表である外部表の突き合わせをする方式です(HiRDB External Data Accessが組み込まれている場合に適用されます)。 | 速い | 外表のヒット件数が少なく,内表のヒット件数が多い場合に,高速に検索できます。 | 外表から行を取り出すごとに,外部表のある外部サーバを検索するため,外表のヒット件数が多い場合は性能が悪くなります。 |
マージジョインは,外表をあまり絞り込めないときに有効です。
図4-25 SORT MERGE JOINの処理方式
図4-26 KEY SCAN MERGE JOINの処理方式
図4-27 LIST SCAN MERGE JOINの処理方式
ネストループジョインは,内表にインデクスが定義されていて,外表をかなり絞り込めるときに有効です。
図4-28 NESTED LOOPS JOINの処理方式
図4-29 R-LIST NESTED LOOPS JOINの処理方式
図4-30 HASH JOINの処理方式
ハッシュジョインには,4種類の処理方式があります。ハッシュジョインの処理方式と特徴を次の表に示します。
処理方式 | 内容 | 長所 | 短所 | 選択方法 |
---|---|---|---|---|
一括ハッシュジョイン | 内表から作成したハッシュ表を,すべて作業表用バッファ領域に展開し,ハッシュジョインをする方式です。 メモリ使用量はやや多くなり,処理性能もやや良くなります。 |
ハッシュ表を,すべて作業表用バッファ領域に展開してハッシュジョインをするため,高速に処理できます。 | 内表のハッシュ表サイズが大きい場合,使用する作業表用バッファ領域が大きくなるのでSQL文の同時実行性が損なわれます。 | ハッシュ表サイズを変更します。※ |
バケット分割ハッシュジョイン | 内表,外表を複数のバケットに分割し,内表の一部のバケットからハッシュ表を作成して作業表用バッファ領域に展開します。さらに,残りのバケットを作業表用ファイルに退避しておいて,作業表用バッファ領域に展開された内表のバケットと,同じ値の領域の外表バケットを読み出して,ハッシュジョインします。そして,作業表用ファイルから,内表を少しずつ作業表用バッファ領域に展開してハッシュジョインをする方式です。 メモリ使用量は少なくなり,処理性能はやや悪くなります。 |
作業表用バッファ領域が少ない環境でも,ハッシュジョインができます。 | 内表,外表の行をいったん作業表用ファイルに退避するため,作業表用バッファ領域だけでハッシュジョインする場合に比べると,性能が悪くなります。 | |
連続ハッシュジョイン | 3表以上を検索する場合に,最も外側の表以外の表から,ハッシュ表を作成して作業表用バッファ領域に展開しておいて,連続してハッシュジョインをする方式です。 メモリ使用量は多くなり,処理性能は良くなります。 |
ハッシュ表をすべて作業表用バッファ領域に展開してハッシュジョインをするので,高速に処理できます。 また,最も外側の表だけが大きい場合,高速に処理できます。 |
連続実行する表の数が多くなると,使用する作業表用バッファ領域が大きくなります。 | 選択できません。 表の行数を基に,HiRDBが自動的に最適な方式を選択します。 |
断続ハッシュジョイン | 3表以上を検索する場合,表又は作業表を結合するごとに,結合結果を作業表用ファイルに退避してハッシュジョインをする方式です。 メモリ使用量は少なくなり,処理性能は悪くなります。 |
作業表用バッファ領域が少ない環境でも,3表以上のハッシュジョインができます。 | 表又は作業表を結合するごとに,結合結果をいったんファイルに退避するため,入出力が多くなり性能が悪くなります。 |
各処理方式の概要を次に示します。
図4-31 一括ハッシュジョインの処理方式
図4-32 バケット分割ハッシュジョインの処理方式
図4-33 連続ハッシュジョインの処理方式
図4-34 断続ハッシュジョインの処理方式
SELECT-APSLは,SQL実行時に結合方法を動的に決定する方式です。
条件 T1(外表).C1=?パラメタ 基準値 0.047 [1] ネストループジョイン [2] マージジョイン
図4-35 DISTRIBUTED NESTED LOOPS JOINの処理方式
図4-36 CROSS JOINの処理方式
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.