Oracle マテリアライズド・ビューはどのくらい早いのか?

 2016.10.16  株式会社システムインテグレータ

敬遠されがちなマテリアライズド・ビュー

今回は「マテリアライズド・ビュー」(以下、マテビュー)について記載していきたいと思います。

マテビューはテーブルのような実体を持ったビューであります。
実際にマテビューを作成した後、ディクショナリビューのALL_OBJECTSを確認すると「MATERIALIZED VIEW」「TABLE」2つの存在が確認できます。

通常のビューは問合せ毎に結合、演算、集計など色々行い結果を返しますが、
マテビューは結果を実体で保持していますので、問合せが来たらそのまま結果を返します。
この仕組みにより、問合せのスピードが早いという特性があります。

では実際どの程度早くなるかを今回は検証していきたいと思います。

Oracle マテリアライズド・ビューはどのくらい早いのか? 1

検証内容

ビューとマテビューの問合せ速度の差を調べます。

検証詳細

同じ構成のビューとマテビューに対しSELECT文を発行し、その実行時間を取得します。
試行回数は10回行い、その平均時間を結果とします。

パターンは下記の2パターン行います。
・結合のみ行ったケース
・結合と集計をしたケース

検証環境

今回の検証環境は以下の通りです。

マシン情報

検証準備

1、テーブルを5つ作成し、各テーブルにデータを10万件ずつ投入します。
2、5つのテーブル結合したビューを作成します
3、同じ構成のマテビューを用意します。
4、両者の統計情報を最新の状態にします。

 

 

 

 

実験は単純にSELECT文(SELECT * FROM ビュー)で処理時間を計測します。

また、条件を整えるために1回測定ごとにキャッシュのクリアを行います。

結果は、以下のとおりとなりました。

検証結果

※パターンの内容は以下のとおりです。

パターン1:単純な結合

パターン2:単純な結合+計算

処理時間(単位:秒)

  パターン1 パターン2
  ビュー マテビュー ビュー マテビュー
1回目 6.166 1.631 6.515 1.380
2回目 9.065 1.534 6.566 1.378
3回目 6.012 1.298 6.580 1.408
4回目 6.351 1.424 6.570 1.450
5回目 6.361 1.389 7.631 1.372
6回目 5.626 1.473 8.087 1.360
7回目 5.957 1.425 5.881 1.394
8回目 6.263 1.359 6.568 1.483
9回目 6.110 1.369 5.976 1.469
10回目 6.096 1.407 6.235 1.603
平均 6.401 1.431 6.661 1.430

Oracle マテリアライズド・ビューはどのくらい早いのか? 2

マテビューがビューの4倍程早い結果になりました。
集計をしたパターンはもう少し差が出ると思ったのですが、そうでもありませんでした。
今回の場合は結合の処理がビューにとって重荷になったようです。 [RELATED_POSTS]

結論

マテビューはビューより早いです。

結果を実テーブルに入れているため、
おそらくどんな条件でもSELECT問合せに関しては勝利するでしょう。

しかしながら、実際の開発でマテビューはあまり使われません。
何故でしょうか。それは・・・。(それはまた、次回以降の検証で。)


RELATED POST関連記事


RECENT POST「DBlab」の最新記事


DBlab

Oracle デッドロックの原因を追いかけてみる

DBlab

Oracle パーティション検証完結編

DBlab

Oracle B-treeインデックスとビットマップインデックス

DBlab

Oracle INDEXを作成したときのパフォーマンスへの効果を探る

Oracle マテリアライズド・ビューはどのくらい早いのか?
新規CTA