假设我有两个表,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
索引col_x
,tab_b
索引col_y
,我们应该能够通过两个索引搜索来实现这一点。
但是,如果我能在一个索引中对两个表进行索引,或者甚至对视图进行索引,如果源表(tab_a
或tab_b
)发生更改,它会立即自动更新,那就太好了。
在Oracle中有办法做到这一点吗?
我不能与Oracle相提并论,但我相信Materialized Views正是这样做的。
为物化视图选择索引
对物化视图是查询执行和快速刷新,以及每次操作具有不同的性能要求。查询执行可能需要访问物化视图键列,以及可能需要连接和聚合这些列的子集。因此,查询执行通常如果一列位图索引定义在每个物化视图键列。
在物化视图的情况下仅包含使用fast的联接刷新,Oracle建议将在以下列上创建索引包含rowid以改进刷新操作的性能。
如果使用骨料很快就可以刷新了会自动创建索引除非在中指定了USING NO INDEX创建材料化视图陈述
不能在视图上创建索引,因为视图只是某些表的掩码。要做到这一点,请按照@Lieven的指定创建一个物化视图,并在其上创建一个索引。