以相反的顺序回答您的问题
FAST 刷新也称为增量刷新。这应该会给你一个关于差异的线索。COMPLETE 刷新从头开始重建整个 MVIEW,而 FAST 刷新仅应用 DML 对馈送表执行的更改。
为了执行 FAST 刷新,您需要适当的 MVIEW LOG。这会跟踪基础表数据的更改,从而使 Oracle 能够有效地将增量应用于物化视图,而不是查询整个表。
至于语法,这里是基础知识:
SQL> create materialized view log on emp
2 with rowid, primary key, sequence (deptno, job)
3 including new values
4 /
Materialized view log created.
SQL> create materialized view emp_mv
2 refresh fast on commit
3 as
4 select deptno, job from emp
5 group by deptno, job
6 /
Materialized view created.
SQL>
该ON COMMIT
子句意味着 MVIEW 以事务方式刷新(与ON DEMAND
常规批量刷新相反)。这些REFRESH
子句指定是应用增量刷新还是完全刷新。有一些类别的查询会强制使用COMPLETE
刷新,尽管这些似乎随着 Oracle 的每个新版本而减少。
快速测试看看它是否有效......
SQL> select * from emp_mv
2 order by deptno, job
3 /
DEPTNO JOB
---------- ---------
10 MANAGER
10 PRESIDENT
10 SALES
20 ANALYST
20 CLERK
20 MANAGER
30 CLERK
30 MANAGER
30 SALESMAN
40 CLERK
40 DOGSBODY
11 rows selected.
SQL>
新纪录怎么样?
SQL> insert into emp (empno, ename, deptno, job)
2 values (6666, 'GADGET', 40, 'INSPECTOR')
3 /
1 row created.
SQL> commit
2 /
Commit complete.
SQL> select * from emp_mv
2 order by deptno, job
3 /
DEPTNO JOB
---------- ---------
10 MANAGER
10 PRESIDENT
10 SALES
20 ANALYST
20 CLERK
20 MANAGER
30 CLERK
30 MANAGER
30 SALESMAN
40 CLERK
40 DOGSBODY
40 INSPECTOR
12 rows selected.
SQL>
您可以在SQL 参考中找到有关语法的更多详细信息。还值得阅读Data Warehousing Guide 中的物化视图一章。
尽管下面的评论者担心,这确实像宣传的那样有效。不幸的是,发布演示的常用位置(SQL Fiddle、db<>fiddle)不允许物化视图。我在 Oracle SQL Live 上发布了一些内容(需要免费的 Oracle 帐户):我正在等待 Oracle 批准它,并会在它到达时更新这个问题。