Материализованные представления в oracle поддерживают функцию под названием Query Rewriting.Это означает, что база данных может анализировать конкретный запрос к базовым таблицам, решать, будут ли возвращены те же результаты из материализованного представления, и запрашивать MV вместо базовых таблиц.Это может быть довольно хорошей оптимизацией в некоторых случаях.Говорить оракулу об отключении переписывания запросов означает отказаться от этой потенциальной оптимизации и всегда запрашивать базовые таблицы, даже если запрос к MV вернет те же данные.
Примером будет:
create materialized view emp_salary
refresh fast on commit
as
select first_name, last_name, salary
from employee, pay_rate
where employee.id = pay_rate.employee_id
;
Затем выполнить запрос:
select last_name, salary
from employee, pay_rate
where employee.id = pay_rate.employee_id
Механизм запросов может взять приведенный выше регулярный оператор выбора и извлечь данные непосредственно из материализованного представления, не выполняя потенциально дорогостоящее соединение (так как соединение ужесделано М.В.)Это переписывание запроса.
Этот вопрос описывает, что делает предложение with sysdate next
.Очевидно, он сообщает базе данных, что следующая дата обновления будет через 1 день (sysdate +1).