Занимает ли место материализованное представление "объединение всех" - PullRequest
1 голос
/ 13 октября 2011

Копирует ли быстрое обновление при фиксации объединения все материализованные представления (в 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
);

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

Ответы [ 2 ]

3 голосов
/ 13 октября 2011

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

DROP MATERIALIZED VIEW xxx PRESERVE TABLE;

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

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

EDIT:

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

0 голосов
/ 13 октября 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
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...