物化视图的增量刷新如何工作?

时间:2017-10-31 04:24:31

标签: oracle views materialized-views

说我有一个下面的查询正在构建物化视图(MV)     select * from employee, department where employee.id = department.id and name like '%Andy%'

关于MV的增量更新如何在内部工作,我有两个相关的问题

1)假设我在员工或部门表中插入或更新任何条目,我可以将MV上的increment refresh配置为插入/更新事务的异步 或者必须是同步过程?

2)插入或更新时,oracle是否评估(通过事务日志)每个更新/插入的行并应用MV查询条件,看看是否满足它。如果是,请在MV中更新或插入行?

2 个答案:

答案 0 :(得分:0)

  

1)假设我在员工或部门表中插入或更新任何条目,我可以将MV上的增量刷新配置为插入/更新事务的异步,还是必须是同步过程?

如果要在基表上提交更改后立即在实例化视图上提供数据,则可以使用ON COMMIT刷新方法。

或者,如果要通过逐步将更改应用于实体化视图进行刷新,则可以使用FAST刷新方法。您可以异步执行此操作。

  

2)插入或更新时,oracle是否评估(通过transactionl logas)每个更新/插入的行并应用MV查询条件,看看是否满足它。如果是,请在MV中更新或插入行?

这取决于您使用的刷新方法。如果您正在使用FAST或ON COMMIT刷新方法,那么它只会将更改应用于MV,该更改满足用于创建MV的查询中定义的条件。

答案 1 :(得分:0)

对于FAST REFRESH,您必须在为MV选择的基表上创建MATERIALIZED VIEW LOG。在这些物化视图日志中,Oracle存储更新/插入/删除的行信息。即Oracle不会按照您的假设使用REDO日志。

一旦刷新了基于表的所有MView(通过ON COMMIT或手动REFRESH),将截断相应物化视图日志的内容。