Чтобы ответить на ваши вопросы в обратном порядке
Быстрое обновление также называется инкрементным обновлением.Это должно дать вам ключ к разнице.Обновление COMPLETE восстанавливает весь MVIEW с нуля, тогда как обновление FAST применяет только те изменения из DML, которые были рассчитаны для таблиц фидеров.
Для выполнения обновлений FAST необходим соответствующий журнал MVIEW.
Что касается синтаксиса, хорошо вот основы:
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
refresh, хотя они кажутся уменьшающимися с каждой новой версией 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 .Также стоит прочитать главу Материализованное представление в Руководстве по хранилищу данных .