あまりなじみのない方もいるかもしれませんが、Oracleにはクラスタというオブジェクトが存在します。クラスタとは、結合処理のパフォーマンスを向上させるために使用されるデータ構造で、複数の表を結合した状態でデータベースに格納します。具体的には、図10のように、同一のキー値(クラスタ・キー)を持つ複数の表のデータが、まとめて同じデータブロックに格納されます。キー値が結合列になっている場合、同じブロックに複数表のデータが格納されているのでI/O減少によるパフォーマンス向上が期待できます。
クラスタは、結合処理を最適化するための特殊な構造であり、クラスタ内の単一の表に対する検索処理や、クラスタ内の表に対する更新処理などは、通常の表に比べて遅くなります。このため、結合処理のパフォーマンスが求められており、それらの表が必ず結合して検索される場合に、使用を検討してください。
以下が通常表に対するSQLとクラスタに対するSQLの実行計画、実行統計になります。
<通常表へのSQL>
<クラスタに対するSQL>
今回は比較するためにPART表、PARTSUPP表を元に以下のSQLでクラスタを作成しています。
図12の実行計画から、「T_PARTSUPP」表がクラスタにアクセスしていたことが確認できます。また、実行統計から、キー値を同一ブロックに格納するクラスタの方がアクセスブロック数が減少していることが確認できます。
今回はOracleの機能を利用した結合処理のチューニング・テクニックを解説しました。次回は、更新処理のチューニング手法について説明します。
Copyright © ITmedia, Inc. All Rights Reserved.