视图中的索引(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_atab_b)发生更改,它会立即自动更新,那就太好了。

在Oracle中有办法做到这一点吗?

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

为物化视图选择索引

对物化视图是查询执行和快速刷新,以及每次操作具有不同的性能要求。查询执行可能需要访问物化视图键列,以及可能需要连接和聚合这些列的子集。因此,查询执行通常如果一列位图索引定义在每个物化视图键列。

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

如果使用骨料很快就可以刷新了会自动创建索引除非在中指定了USING NO INDEX创建材料化视图陈述

不能在视图上创建索引,因为视图只是某些表的掩码。要做到这一点,请按照@Lieven的指定创建一个物化视图,并在其上创建一个索引。

最新更新