Jos*_*ton 7 oracle data-warehouse view
我目前正在一大堆表上创建物化视图日志,以支持具有快速刷新的物化视图。我们正在创建的物化视图包含来自各种表的大约 30 列。我们的一个事实表包含大约 15 列,这些列将用于物化视图。
创建MV日志时,是否有必要枚举MV中所需的基表中的所有列?
CREATE MATERIALIZED VIEW LOG ON SCHEMA.TABLE_A
WITH ROWID, PRIMARY KEY, SEQUENCE (COL1, COL2, COL3, ..., COL48)
INCLUDING NEW VALUES;
Run Code Online (Sandbox Code Playgroud)
以上是我目前如何创建 MV 日志的示例。我承认以上是反复试验的结果,没有彻底了解语句中每个组件的工作原理(我最了解)。
什么情况下我需要定义哪些列应该包含在MV日志中?
一些物化视图只是跨多个表的连接。其他将包括聚合、分组、总和等。
不,在创建物化视图日志时,您不需要枚举物化视图中使用的列。事实上,您不能使用主键方法创建物化视图日志并包含所有列,因为您将包含主键列本身,这是不允许的。
物化视图日志的概念是存储发生变化的数据的rowid或主键。然后刷新可以从表中查找整个记录。将特定列添加到日志的 WITH 子句中,显式地记录了物化视图日志本身中的数据。如果您的物化视图查询在这些列上进行过滤或加入它们,则可以加快刷新速度。
理论上,如果 MV 中使用的所有列都在日志中,那么它应该能够在不引用表的情况下进行刷新。该文档并未表明正在执行此操作。追踪这一点会很有趣。即使是这样,额外的存储要求也可能使这条路线不值得麻烦。
您可能应该只创建物化视图日志而不指定列列表,如下所示:
CREATE MATERIALIZED VIEW LOG ON SCHEMA.TABLE_A
WITH ROWID, PRIMARY KEY, SEQUENCE INCLUDING NEW VALUES;
Run Code Online (Sandbox Code Playgroud)
更多信息:
归档时间: |
|
查看次数: |
3989 次 |
最近记录: |