検索
連載

表の結合を極めるチューニング・テクニックOracle SQLチューニング講座(10)(3/4 ページ)

本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

外部表(駆動表)に絞り込み条件がある結合を含むSQLを実行する

 次に、WHERE条件によってある程度絞ったデータを結合する場合について見ていきます。ここでは「LINEITEM」表の「l_orderkey」列(主キーの一部)を検索条件に指定し、結合方法によってどのような違いが出るのかを見ていきたいと思います。

 図6では、検索条件を追加したSQLにて、ヒント文でネステッド・ループ結合の使用をオプティマイザに指示しています。

図6 検索条件を追加したネステッド・ループ結合の場合
図6 検索条件を追加したネステッド・ループ結合の場合

 図6の実行統計から、検索条件を加えたことで対象となる件数が減少し、また索引が効率よく使用されることで、図1と比べると実行時間、アクセスブロック数が大きく減少していることが確認できます。

 図7では、ヒント文でソート/マージ結合の使用をオプティマイザに指示しています。

図7 検索条件を追加したソート/マージ結合の場合
図7 検索条件を追加したソート/マージ結合の場合

 図7の実行統計では、「query」の値はネステッド・ループ結合に比べて小さくなっていますが、実行時間は長くなってしまっています。これは「LINEITEM」表の結合条件列である「l_suppkey」に索引が作成されていないことにより、この表に対するソート処理が発生しているためです。

 図8では、ヒント文でハッシュ結合の使用をオプティマイザに指示しています。

図8 検索条件を追加したハッシュ結合の場合
図8 検索条件を追加したハッシュ結合の場合

 図9は各結合方法による実行時間、アクセスブロック数の結果をグラフにしたものです。

図9 結合方法別の実行時間とアクセスブロック数
図9 結合方法別の実行時間とアクセスブロック数

 図9の結果より、アクセスブロック数ではハッシュ結合が一番少ないですが、実行時間においてはネステッド・ループ結合が一番速い結果となっていることが分かります。今回のような、外部表(駆動表)に絞り込み条件がある結合の場合には、ネステッド・ループ結合が最も適した結合方法であるといえます。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る