Oracleの機能を使って表の結合を高速化する:Oracle SQLチューニング講座(11)(4/4 ページ)
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)
クラスタを利用する
あまりなじみのない方もいるかもしれませんが、Oracleにはクラスタというオブジェクトが存在します。クラスタとは、結合処理のパフォーマンスを向上させるために使用されるデータ構造で、複数の表を結合した状態でデータベースに格納します。具体的には、図10のように、同一のキー値(クラスタ・キー)を持つ複数の表のデータが、まとめて同じデータブロックに格納されます。キー値が結合列になっている場合、同じブロックに複数表のデータが格納されているのでI/O減少によるパフォーマンス向上が期待できます。
クラスタは、結合処理を最適化するための特殊な構造であり、クラスタ内の単一の表に対する検索処理や、クラスタ内の表に対する更新処理などは、通常の表に比べて遅くなります。このため、結合処理のパフォーマンスが求められており、それらの表が必ず結合して検索される場合に、使用を検討してください。
以下が通常表に対するSQLとクラスタに対するSQLの実行計画、実行統計になります。
<通常表へのSQL>
<クラスタに対するSQL>
今回は比較するためにPART表、PARTSUPP表を元に以下のSQLでクラスタを作成しています。
図12の実行計画から、「T_PARTSUPP」表がクラスタにアクセスしていたことが確認できます。また、実行統計から、キー値を同一ブロックに格納するクラスタの方がアクセスブロック数が減少していることが確認できます。
今回はOracleの機能を利用した結合処理のチューニング・テクニックを解説しました。次回は、更新処理のチューニング手法について説明します。
Copyright © ITmedia, Inc. All Rights Reserved.