Требуется ли место для объединения всех материализованных представлений?

При быстром обновлении при объединении фиксации все материализованные представления (в Oracle) копируют все базовые данные или просто имеют ссылку на них?

Если это материализованное представление действительно копирует все данные, все равно нужно сделать следующее:

create table3 as ( table1 union all table2 );

Так что я могу создавать индексы и журналы материализованных представлений в таблице 3, а таблица 3 - это просто ссылка на таблицу 1 и таблицу 2.

Причина этого в том, что я хочу представить в материализованном виде следующее:

create materialized view mat1
refresh fast on commit
(
  select data, count(*)
  from (table1 union all table2)
  group by data
);

Но вышеперечисленное не обновляется быстро.

Но работает следующее:

create materialized view mat1
refresh fast on commit
(
  select data from table1
  union all
  select data from table2
);

create materialized view mat2
refresh fast on commit
(
  select data, count(*) 
  from mat2
  group by data
);

Но меня беспокоит, что первое материализованное представление без необходимости реплицирует все данные.


person Clinton    schedule 13.10.2011    source источник
comment
Как вы думаете, что означает слово «материализованный»? Может ли что-нибудь быть материальным, не занимая места?   -  person Erwin Smout    schedule 14.10.2011


Ответы (2)


Материализованное представление делает именно это - оно «материализует» данные, создавая таблицу, содержащую данные, определенные запросом. Вы можете продемонстрировать это, отбросив материализованное представление, но сохранив его содержимое в виде таблицы:

DROP MATERIALIZED VIEW xxx PRESERVE TABLE;

Что сохраняет таблицу с именем xxx, которая больше не обновляется. Итак, ваше представление mat1 действительно дублирует все данные в обеих таблицах.

Подумайте об этом - если бы он просто "ссылался" на союз, тогда это был бы обычный вид, не так ли? В этом случае нельзя есть пирог и есть его.

РЕДАКТИРОВАТЬ:

Невозможно быстро обновить сложное материализованное представление. Агрегатные функции, такие как COUNT, - одна из вещей, которые делают представление сложным. Согласно документам, UNION ALL тоже, поэтому я удивлен, что ваше представление mat1 быстро обновляется.

person DCookie    schedule 13.10.2011
comment
Есть ли способ переписать mat1 таким образом, чтобы он объединял union all и count(*) в одно быстро обновляемое материализованное представление? Если нет, то почему? - person Clinton; 13.10.2011

Да - он дублирует все данные, иначе он был бы просмотрен без необходимости обновления ...

не уверен, но вы можете попробовать:

create materialized view mat1
refresh fast on commit
(
  select data, sum (c) from
  (
  select 1 x, data, count(*) c from table1 group by 1, data
  union
  select 2, data, count(*) from table1 group by 2, data
  ) group by data
);
person Yahia    schedule 13.10.2011