次に、WHERE条件によってある程度絞ったデータを結合する場合について見ていきます。ここでは「LINEITEM」表の「l_orderkey」列(主キーの一部)を検索条件に指定し、結合方法によってどのような違いが出るのかを見ていきたいと思います。
図6では、検索条件を追加したSQLにて、ヒント文でネステッド・ループ結合の使用をオプティマイザに指示しています。
図6の実行統計から、検索条件を加えたことで対象となる件数が減少し、また索引が効率よく使用されることで、図1と比べると実行時間、アクセスブロック数が大きく減少していることが確認できます。
図7では、ヒント文でソート/マージ結合の使用をオプティマイザに指示しています。
図7の実行統計では、「query」の値はネステッド・ループ結合に比べて小さくなっていますが、実行時間は長くなってしまっています。これは「LINEITEM」表の結合条件列である「l_suppkey」に索引が作成されていないことにより、この表に対するソート処理が発生しているためです。
図8では、ヒント文でハッシュ結合の使用をオプティマイザに指示しています。
図9は各結合方法による実行時間、アクセスブロック数の結果をグラフにしたものです。
図9の結果より、アクセスブロック数ではハッシュ結合が一番少ないですが、実行時間においてはネステッド・ループ結合が一番速い結果となっていることが分かります。今回のような、外部表(駆動表)に絞り込み条件がある結合の場合には、ネステッド・ループ結合が最も適した結合方法であるといえます。
Copyright © ITmedia, Inc. All Rights Reserved.