Индекс на представлении (Oracle) - PullRequest
19 голосов
/ 30 июня 2011

Допустим, у меня есть две таблицы, tab_a и tab_b.

И я создаю вид, подобный следующему:

create view join_tabs as
(
  select col_x as col_z from tab_a
  union
  select col_y as col_z from tab_b
);

И если я сделаю следующее:

select * from join_tabs where col_z = 'BLAH';

Если tab_a indexes col_x и tab_b indexes col_y, мы сможем сделать это с двумя поисками по индексу.

Однако было бы неплохо, если бы я мог создать индекс по обеим таблицам в одном индексе или даже индексировать представление так, чтобы оно автоматически обновлялось немедленно при изменении исходных таблиц (tab_a или tab_b).

Есть ли способ сделать это в Oracle?

Ответы [ 2 ]

21 голосов
/ 30 июня 2011

Я не в курсе Oracle, но я верю, что Материализованные представления делают именно это.

Выбор индексов для материализованных представлений

Двумя наиболее распространенными операциями в материализованном представлении являются выполнение запроса и быстрое обновление, и каждая операция имеет разные требования к производительности.При выполнении запроса может потребоваться доступ к любому подмножеству материализованных столбцов ключей представления, и может потребоваться объединение и агрегирование по подмножеству этих столбцов.Следовательно, выполнение запроса обычно выполняется лучше всего, если для каждого столбца ключа материализованного представления определен одностолбцовый растровый индекс.

В случае материализованных представлений, содержащих только объединения с использованием быстрого обновления, Oracle рекомендует создавать индексы настолбцы, которые содержат значения строк для повышения производительности операции обновления.

Если материализованное представление с использованием агрегатов быстро обновляется, то индекс создается автоматически, если в операторе CREATE MATERIALIZED VIEW не указан USING NO INDEX.

10 голосов
/ 30 июня 2011

Вы не можете создать индекс для представления, так как представление является просто маской для некоторых таблиц. Для этого создайте материализованное представление в соответствии с @Lieven и создайте для него индекс.

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