PARTITIONの効果を検証する2015年7月に公開した、「パーティションの効果を検証する」では、題名のとおりパーティション化したデーブルに対する速度検証を行ないました。(参照)結果はご覧のとおりだったのですが、ユーザー様より「同じデータで、「月」カラムを追加で用意し、それにインデックスを張った場合は、一ヵ月ごとにパーティション化した場合と比較して、どっちが速いのか」といった追加実験のご要望をいただきました。模したテーブルに大量データを投入し、月ごとにパーティション化したテーブルと、インデックスを付加したテーブルでデータ抽出し、そのレスポンスを比較します。パーティションテーブルには、レンジ・パーティションを採用します。・公正を保つため、データごとテーブルをコピーする・片方は日付型カラムをキーにしたレンジ・パーティションを構成し、一ヵ月ごとにパーティション化する・片方は月単位をあらわすカラムにインデックスを付加する。(カラムとその内容は両方のテーブルに追加)・SQLを実行し、一か月分の件数を集計。そのレスポンスを測定。・SQL実行前にキャッシュをクリアし、その後各テーブルで5回処理を行う。※5回実行する間、キャッシュクリアは行わない。※上記を3回繰り返した中間値を採用する。今回の検証環境は以下の通りです。同内容・同データで「TEST_PART2」を複製し、こちらは通常のテーブルとする。「UPDDATE」にインデックスを付加する。データは「UPDDATE」の月の部分が入る。データ生成機能を使用し、データを1000万件投入します。今回追加した「UPDMONTH」ですが、残念ながらこちらは仕様にあわせた生成はできませんので、別途算出して設定します。コピー機能を使用してテーブルを複製し「TEST_INDEX」と名づけ、「UPDMONTH」にインデックスを付加します。「TEST_PART」テーブルには、前回と同様のパーティション設定を行ないました。(詳細をご覧になりたい方はこちら)それでは検証開始です。検証結果テーブルから5月分のデータ件数を取得するSQLを実行しましす。結果は以下のとおりです。対象件数は852,535インデックスの勝利となりました。前回検証時とDB環境が変化しているため、パーティションのほうはまったくおなじ結果とはなっておりませんが、やはり通常時よりも速く、キャッシュ発生時はさらに速くなっています。それでも、インデックスを付加したケースにはかないませんでした。追加検証とはいえ、今回のお題はインデックスの効果が出やすいようなテーブル設定であることも事実です。そこで、なるべく公平になるようにTEST_PARTからパーティション設定を解除し、UPDDATEに新たにインデックスを付加したテーブルを用意します。SQLもおなじものを実行し、速度を計測します。対象件数は852,535今回実験で最速の結果となりました。今回の検証では、パーティションの効果はあるものの、インデックスを付加した速度を超えることはありませんでした。パーティションが最速になるケースが必ずあるはずです。分割の仕方や、データ量が異なれば、COUNTじゃなければ、そもそもほかに適したパーティション化があるのでは・・・・などなど、まだまだ掘り下げられそうです。今回はここまでとしますが、次の機会に追加検証を行なって行きたいと思います。