在 Oracle中更新存储过程 物化视图的计算成本是基于查询执行还是结果集?更具体地说,Oracle 存储查询结果的方式是否会大大增加刷新视图所需的时间?
当然,需要很长时间才能执行的查询以及非常大或非常小的结果集使得这不可能无处不在地回答。
问题更多的是关于视图如何实际存储结果集(在内存中,在磁盘上),所以我可以考虑重建物化视图的频率。
在 Oracle中更新存储过程 物化视图的计算成本是基于查询执行还是结果集?更具体地说,Oracle 存储查询结果的方式是否会大大增加刷新视图所需的时间?
当然,需要很长时间才能执行的查询以及非常大或非常小的结果集使得这不可能无处不在地回答。
问题更多的是关于视图如何实际存储结果集(在内存中,在磁盘上),所以我可以考虑重建物化视图的频率。
物化视图基本上是一个表格,结合了一种算法来更新它。
01:37:23 HR@sandbox> create materialized view mv_dual as select dummy from dual;
Materialized view created.
Elapsed: 00:00:00.52
01:37:56 HR@sandbox> select object_name, object_type from user_objects where object_name = 'MV_DUAL';
OBJECT_NAME OBJECT_TYPE
--------------- -------------------
MV_DUAL TABLE
MV_DUAL MATERIALIZED VIEW
Elapsed: 00:00:00.01
您还可以在预建表上创建物化视图。
如果我们谈论刷新 - 有两个选项:快速刷新和完全刷新。
完全刷新只是重新执行 MV 查询,而快速刷新执行增量更新。
http://docs.oracle.com/cd/E16338_01/server.112/e10706/repmview.htm#i29858
有两种类型的 mview
完全刷新 mview - 每次刷新都会重建整个 mview。类似于删除和插入(注意:如果您指定 atomic = F 或版本 < 9,它将被截断/插入追加)。
快速刷新 mview - oracle 将创建一个表来存储增量更改。刷新时,存储在边表中的更改将应用于 mview。
快速刷新在刷新时速度更快,但会减慢基表上的 dml 操作。
当您考虑您的刷新策略时,您应该考虑对基表应用了多少更改以及您需要多久刷新一次 mview。