可以说我有两张桌子,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
);
Run Code Online (Sandbox Code Playgroud)
如果我做以下事情:
select * from join_tabs where col_z = 'BLAH';
Run Code Online (Sandbox Code Playgroud)
如果tab_a索引col_x和tab_b索引col_y,我们应该能够通过两个索引搜索来执行此操作.
但是,如果我可以在一个索引中对两个表创建索引,甚至索引视图,那么如果源表(tab_a或tab_b)发生更改则会立即自动更新,这样会很好.
有没有办法在Oracle中执行此操作?
Lie*_*ers 21
我不是与甲骨文相提并论,但我相信Materialized Views就是这么做的.
物化视图上最常见的两个操作是查询执行和快速刷新,每个操作都有不同的性能要求.查询执行可能需要访问实体化视图键列的任何子集,并且可能需要加入并聚合这些列的子集.因此,如果在每个物化视图键列上定义了单列位图索引,则查询执行通常会执行得最好.
对于仅包含使用快速刷新的连接的实例化视图的情况,Oracle建议在包含rowid的列上创建索引,以提高刷新操作的性能.
如果使用聚合的物化视图可快速刷新,则会自动创建索引,除非在CREATE MATERIALIZED VIEW语句中指定了USING NO INDEX.