视图索引(Oracle)

时间:2011-06-30 07:48:26

标签: sql oracle

假设我有两个表,tab_atab_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索引col_xtab_b索引col_y,我们应该可以通过两次索引搜索来完成此操作。

但是,如果我可以在一个索引中为两个表创建索引,甚至索引视图,那将是一种很好的方式,如果源表(tab_a或{{1} })改变。

有没有办法在Oracle中执行此操作?

2 个答案:

答案 0 :(得分:21)

我与Oracle并不相同,但我相信Materialized Views正是这样做的。

选择物化视图的索引

  

a上最常见的两个操作   物化视图是查询执行   并快速刷新,以及每个操作   有不同的表现   要求。查询执行可能   需要访问的任何子集   物化视图键列,和   可能需要加入并聚合   这些列的子集。   因此,通常会执行查询   如果是单列,则表现最佳   每个都定义了位图索引   物化视图键列。

     

在物化视图的情况下   仅使用快速包含联接   刷新,Oracle建议   索引将在列上创建   包含rowid来改进   刷新操作的性能。

     

如果物化视图使用   然后,聚合是快速刷新的   将自动创建索引   除非在中指定了USING NO INDEX   CREATE MATERIALIZED VIEW   言。

答案 1 :(得分:10)

您无法在视图上创建索引,因为视图仅仅是某些表上的掩码。为此,请创建@Lieven指定的物化视图,并在其上创建索引。