Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 视图索引(Oracle)_Sql_Oracle - Fatal编程技术网

Sql 视图索引(Oracle)

Sql 视图索引(Oracle),sql,oracle,Sql,Oracle,假设我有两张桌子,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'; 如果我做了以下事情: create view join_tabs as ( select col_x as co

假设我有两张桌子,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';
如果我做了以下事情:

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的水平,但我相信我能做到这一点

为物化视图选择索引 计算机上最常见的两种操作 具体化视图是查询执行 和快速刷新,以及每次操作 有不同的表现 要求。查询执行可能会失败 需要访问 物化视图键列,以及 可能需要加入并聚合到 这些列的子集。 因此,查询执行通常 如果是单个列,则性能最佳 位图索引是在每个 物化视图键列

对于物化视图 仅包含使用fast的联接 更新,Oracle建议 可以在以下列上创建索引: 包含rowid以改进 刷新操作的性能

如果使用 那么,聚合是快速刷新的 将自动创建索引 除非中未指定使用索引 创建物化视图 声明


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

是否可以在源视图更改时立即更新此物化视图?这就是“快速刷新”的作用吗?@Clinton-fast-refresh意味着数据以增量方式更新。在物化视图定义中,提交时刷新意味着在提交源表更改时更新数据-刷新与提交同步。提交时刷新需要快速刷新,但快速刷新并不意味着提交时刷新。@贾斯汀,谢谢你的澄清。OP在提交时需要刷新,但现在我想知道什么是增量更新。我假设,与SQL Server一样,从物化视图中进行选择将始终返回与创建视图的选择相同的结果。我的假设错了吗?增量更新意味着只应用对基础表所做的更改来刷新MV,而不是重新执行整个查询来刷新MV。这要求基本表上存在MV日志,并且MV必须足够简单,以允许增量更新。对MV的查询完全可能返回与对基表的查询不同的结果。例如,MVs通常用于将数据从一个系统复制到另一个系统,在源系统上进行的更改与在目标系统上出现的更改之间存在延迟。@Justin-您应该对此作出回答,以便我可以删除我的系统。我投你一票。