MySQLでマテリアライズドビュー2

 さてMySQLOracleのマテリアライズドビューを再現するにあたり、マテリアライズドビューのモードによってそれぞれ再現方法が異なります。元となるクエリーが、集計クエリーなのか、複合クエリーなのか等によって、それぞれ内容が変わってきてしまいますが、大雑把には以下のような対応となります。

リフレッシュオプション

  • 完全リフレッシュ 全データ削除後データを入れ直す
    • TRANCATE 擬似マテリアライズド・ビューとなるテーブル名 + INSERT INTO 擬似マテリアライズド・ビューとなるテーブル名 SELECT 〜 FROM 元テーブル名
  • 高速リフレッシュ 前回からの増分のみをリフレッシュ
    • INSERT INTO 擬似マテリアライズド・ビューとなるテーブル名 SELECT 〜 FROM 元テーブル名 WHERE 元テーブルのプライマリキーのID > 擬似マテリアライズド・ビューとなるテーブル名のプライマリキー

リフレッシュモード(元テーブルとマテリアライズドビューとの同期設定)

  • 即時反映 on commit
    • 【再現方法】insert/update/deleteトリガー設定 or アプリケーション側で、擬似マテリアライズド・ビューとなるテーブルでinsert/update/deleteを同時実行するフレームワークを実装*1
    • 【用途】リアルタイムで反映させる場合に有効、但し更新時にオーバーヘッドが常に掛かる
  • 手動実行 on demand
    • 【再現方法】特になにもしないので、何も無い。
  • 定期更新 start with句・next句(on demand)

*1:MySQLではストアドプロシージャ、トリガーが遅いので、実装が面倒ですが、速度面でこちらが現実的です。