说我有一个下面的查询正在构建物化视图(MV)
select * from employee, department where employee.id = department.id and name like '%Andy%'
关于MV的增量更新如何在内部工作,我有两个相关的问题
1)假设我在员工或部门表中插入或更新任何条目,我可以将MV上的increment refresh
配置为插入/更新事务的异步
或者必须是同步过程?
2)插入或更新时,oracle是否评估(通过事务日志)每个更新/插入的行并应用MV查询条件,看看是否满足它。如果是,请在MV中更新或插入行?
答案 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),将截断相应物化视图日志的内容。