Ответ 1
Чтобы ответить на ваши вопросы в обратном порядке
Быстрое обновление также называется инкрементным обновлением. Это должно дать вам ключ к разнице. Обновление COMPLETE восстанавливает весь MVIEW с нуля, тогда как обновление FAST применяет только изменения из DML, выполненные для таблиц фидеров.
Для выполнения обновлений FAST вам необходим соответствующий журнал MVIEW. Это отслеживает изменения в данных базовых таблиц, что позволяет Oracle эффективно применять delta к материализованному представлению, а не запрашивать всю таблицу.
Что касается синтаксиса, вот основы:
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. Также стоит прочитать главу Материализованное представление в Руководстве по хранилищу данных.
Несмотря на опасения комментаторов ниже, это работает как рекламируется. К сожалению, обычные места для публикации демонстраций (SQL Fiddle, db & lt;> fiddle) не допускают материализованных представлений. Я опубликовал что-то в Oracle SQL Live (требуется бесплатная учетная запись Oracle): я ожидаю одобрения Oracle и обновлю этот вопрос, когда он появится.