マテリアライズドビューのリフレッシュ時にSELECTするとどうなるか。SE日記MENUOracleSQLの基本構文データの取得データの追加データの更新データの削除SQLが遅くなる原因SQLのチューニング学習方法SE日記OracleSQLの基本構文データの取得データの追加データの更新データの削除SQLが遅くなる原因SQLのチューニング学習方法ビューHOMEOracleビューマテリアライズドビューのリフレッシュ時にSELECTするとどうなるか。ビューマテリアライズドビューのリフレッシュ時にSELECTするとどうなるか。ここでは、ORACLEのマテリアライズドビューのリフレッシュを行っているときに、そのマテリアライズドビューに対しSELECT文を実行するとどうなるか紹介します。結論:エラーにならないマテリアライズドビューのリフレッシュには、いくつかのオプションがありますが、デフォルトでは、DELETE-INSERTで別のトランザクションとして実行されます。イメージ的には、DELETE-INSERTが正常に完了すると、コミットされデータが反映されるイメージです。リフレッシュ実行中にSELECT文で実行されても、エラーにはなりません。参照できるデータは今現在マテリアライズドビューに存在するデータで、変更中のデータが参照されることはありません。注意が必要ただし、リフレッシュにはオプションがあり、truncate-insertにすることもできます。この場合は、先ほどとは違って、truncateが実行されている間にデータを参照するとデータが0件で表示されます。DBMS_MVIEWでrefreshプロシージャでatomic_refreshというオプションで指定されます。これがTUREの場合は、DELETE-INSERT、FALSEの場合は、truncate-insertとなります。マテビューのリフレッシュが気になる際は、ぜひご確認ください。ちなみに、マテビューのチューニングでお悩みの方は「マテリアライズドビューが遅いときの原因とチューニング方法」をご覧ください。最後に最後までお読みいただきありがとうございます。SQLのチューニングについては、「SELECT文のSQLチューニング方法まとめ」で詳しく解説していますので、ぜひ参考にしてください。