视图生成时的 Oracle 值缓存?

Posted

技术标签:

【中文标题】视图生成时的 Oracle 值缓存?【英文标题】:Oracle value caching on view generation? 【发布时间】:2011-01-17 20:07:48 【问题描述】:

我有两个表 STATEMENT 和 TRANSACTION,我想在它们上创建一个视图。两个表都有 ID (VARCHAR2) 和 TS (NUMBER)。

对于每个 ID,每个月都会根据 TRANSACTION 和其他表生成 STATEMENT。

视图有 3 列:ID、TS 和 VALUE。视图中的每一行对应于 STATEMENT 中的一行,而 VALUE 是一个相当复杂的聚合,取决于 STATEMENT 和 TRANSACTION。

具体来说,从 TRANSACTION 中检索到的 VALUE 部分对于每个 ID 都是恒定的,而与 TS 无关。

既然这个聚合值没有变化,Oracle 会自动缓存它吗?如果没有,是否可以在某处缓存这些值,例如,为此值创建一个中间视图?

【问题讨论】:

【参考方案1】:

非物化视图不会被缓存——它们只是包含在正在执行的语句中进行引用时运行的 SQL 语句。将它们视为视图包含的语句的宏或变量。所以分层视图没有性能价值——有一个引用另一个。

Oracle 支持物化视图,但 materialized views are notoriously restrictive -- 没有非确定性函数等。

为了区分,CREATE VIEW 创建了一个非物化视图。 Oracle 需要 MATERIALIZED 关键字:CREATE MATERIALIZED VIEW ... 才能实现视图。

【讨论】:

以上是关于视图生成时的 Oracle 值缓存?的主要内容,如果未能解决你的问题,请参考以下文章

oracle 序列视图索引

插入视图时的默认值

怎么查看oracle系统视图 v$database,用于显示数据库的基本信息

使用从序列对象生成的数据库 ID 创建 Oracle 视图

Mysql视图

PHP 在视图中对多个cck值进行分组时的增量类