パーティション・プルーニングの有効性を検証する:Oracleパーティショニング実践講座(2)(1/4 ページ)
本連載では、大規模データベースでのパフォーマンス・チューニングの手法として、Oracleパーティショニングを解説する。単なる機能説明にとどまらず、実機による検証結果を加えて、より実践的な内容をお届けする。(編集部)
前回「パーティショニングは大規模DBの性能向上に効く」で説明したように、パーティショニングは、大規模なデータを扱ううえでポイントとなる機能です。特にアクセスするパーティションを自動的に絞り込むパーティション・プルーニング機能にパフォーマンス効果を期待する方は多いのではないでしょうか。今回はパーティション・プルーニング機能の有効性について紹介したいと思います。
パーティション・プルーニングが機能する条件
パーティション表にアクセスしただけで、パーティション・プルーニングが機能するわけではありません。パーティショニングではパーティション・キーと呼ばれる、データを分割する際に基準となる列を設定しますが、このパーティション・キーをパーティション表にアクセスするSQLのWHERE句の条件として指定しなければ、アクセスするパーティションを絞り込むことはできないのです。
例えば、リスト1のように定義したsales_range表の場合、パーティション・プルーニングを機能させるには、リスト2のようにパーティション・キーであるsales_date列をWHERE句の条件に指定する必要があります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
パーティション・プルーニングが行われているかどうかはSQLの実行計画を確認します。リスト2の実行計画を参照すると、アクセスしたパーティションの範囲を示す「Pstart」「Pstop」がそれぞれ「2、2」であることから2番目のパーティションがアクセスされたこと、また、「Operation」に「PARTITION RANGE SINGLE」が表示されていることから、パーティション・プルーニングが行われたことが分かります。
またリスト3のように、パーティション・キーではないsalesman_name列の値を条件とした場合は、パーティション・プルーニングは機能しません。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
リスト3の実行計画では、アクセスしたパーティションの範囲を示す「Pstart」「Pstop」が「1、4」であることから、1〜4番目のパーティションまでアクセスしたこと、「Operation」に「PARTITION RANGE ALL」が表示されていることから、sales_range表を構成する4つのパーティションのすべてにアクセスしたことが分かります。
パーティション・キーであるsales_date列をWHERE句の条件にしても、リスト4のようなSQLの場合、パーティション・プルーニングは機能しません。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
リスト4は2006年5月の情報にアクセスするという意味ではリスト2のSQLと同じですし、パーティション・キーであるsales_date列もWHERE句の条件に指定されています。2つのSQLとの違いは、パーティション・キーであるsales_date列が修飾されているかどうかです。リスト4のSQLではTO_CHAR関数がsales_date列に使用されています。
このように、パーティション・キーに対して関数や算術を実施したり、暗黙の型変換が行われたりする場合、パーティション・プルーニングは機能しないということです。索引を利用したアクセスと同様に、パーティション・プルーニングを機能させる場合には、SQLの記述ルールを守る必要があります。
Copyright © ITmedia, Inc. All Rights Reserved.