表の結合を極めるチューニング・テクニック:Oracle SQLチューニング講座(10)(4/4 ページ)
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)
内部表に絞り込み条件がある結合を含むSQLを実行する
それでは、今度は内部表に絞り込み条件がある場合について見ていきます。上述の「外部表(駆動表)に絞り込み条件がある結合を含むSQLを実行する」で使用したSQLにおいて、FROM句に指定した表の順序を入れ替えた場合について考えてみましょう。ここでは、その違いを一番確認しやすいネステッド・ループ結合の場合について説明します。
図10は「LINEITEM」表を、図11は「SUPPLIER」表をそれぞれ外部表とし、ネステッド・ループ結合することをオプティマイザに指示しています。
図10、図11の実行統計を比べると、内部表に絞り込み条件があった場合の方が、実行時間、アクセスブロック数ともに非常に多くなっていることが確認できます。
図12は、絞り込み条件を外部表、内部表で行った場合の実行時間、アクセスブロック数の結果をグラフにしたものです。
図12の結果から、ネステッド・ループ結合の場合には、適切な表を外部表とすることが非常に重要であることが分かります。外部表を決定する際は、表全体のレコード件数で判断するのではなく、結合条件以外のWHERE句で、より絞り込まれる方を外部表にすべきであるという点に注意してください。
まとめ
表1は、実行される検索のパターン別にどの結合方法がよいかをマトリックス表にしたものです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
表1からも分かるように、結合条件が等価条件でないためにハッシュ結合を行えない場合以外は、大量の結合処理では、まずハッシュ結合を検討すべきです。
次回も結合に関するチューニングについて紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.