本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)
前回「表の結合を極めるチューニング・テクニック」では、絞り込み条件がない結合を含むSQL、絞り込み条件のある結合を含むSQLについて実例を基に最適な結合方法を説明しました。
今回は、Oracleの機能である「マテリアライズド・ビュー」「BITMAP JOIN INDEX」「クラスタ」を利用した結合処理に関するチューニング・テクニックについて説明します。
結合処理などを含む複雑な検索処理のパフォーマンス向上が求められている場合、マテリアライズド・ビュー(Materialized View:以後、MView)の利用が有効です。MViewには大きく2つの利用方法があり、1つはリモート・データベース上に存在するデータをローカル・データベース上に定期的にコピーする目的で使用され、スナップショットとも呼ばれます。もう1つは、ローカル・データベース上のデータの集計や結合処理を高速化するために使用されます。例えば、日々の売り上げデータが格納された表を集計するMViewを作成しておくことで、売り上げ集計処理を高速化することが可能となります。
MViewの元となる表データが更新された場合、リフレッシュと呼ばれる処理によって、MViewにその変更が反映されます。リフレッシュには、図2のように毎回すべてのデータを入れ替える完全リフレッシュと、元表への変更履歴を保持するマテリアライズド・ビュー・ログ(Materialized View Log:以降、MViewログ)を利用し、差分のみを反映する高速リフレッシュがあります。
Oracle9i以降のバージョンでは、ローカル・データベース内にあるデータを集計、結合したMViewを作成しておき、元となる表データが更新された場合、即時に反映させることも可能です。
MViewを使用することで、時間のかかる複雑な検索処理を、短時間で処理することが可能となります。今回のテーマは結合ですので、結合を含むMViewに限定し、そのメリットを実行計画、実行統計から確認してみます。AUTOTRACE機能の見方については、第5回「SQLチューニングの基盤となる統計情報」を参照してください。
以下の図3は、MViewを使用していない場合の実行計画と実行統計になります。
実行計画を見ると、ネステッド・ループ結合とハッシュ結合の2つの結合処理が行われていることが確認できます。また、アクセスブロック数も108603と多くなっています。
Copyright © ITmedia, Inc. All Rights Reserved.