Материализованный взгляд - Oracle - PullRequest
2 голосов
/ 09 декабря 2011

У меня есть материализованное представление, для которого я хочу изменить время его обновления:

REFRESH FORCE START WITH SYSDATE NEXT SYSDATE +1 DISABLE QUERY REWRITE

Я хочу знать немного об этом.

  1. Что изображает СЛЕДУЮЩИЙ SYSDATE +1 (как я собираюсь его изменить)
  2. Что такое ОТКЛЮЧИТЬ ЗАПРОС ПЕРЕЗАПИСАТЬДругими словами, ОТКЛЮЧИТЬ ЗАПИСЬ ПЕРЕЗАПИСИ против ЗАПИСИ ПЕРЕЗАПИСИ в отношении материализованного представления.

Ответы [ 2 ]

4 голосов
/ 09 декабря 2011

Материализованные представления в 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).

1 голос
/ 09 декабря 2011

Одним из основных преимуществ материализованных представлений является возможность использовать перезапись запросов ... не совсем уверен, почему вы бы отключили переписывание запросов.

переписывание запроса позволяет использовать материализованные представления вместо реальных таблиц подробностей.

значение NEXT используется оракулом для определения первого автоматического обновления. так что в вашем примере он будет обновляться в первый раз через 1 день после создания и обновляться каждый день с этого момента.

изменить на SYSDATE + 6/24 для запуска каждые 6 часов!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...