首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle:只插入物化视图

Oracle:只插入物化视图
EN

Stack Overflow用户
提问于 2013-06-10 09:51:37
回答 1查看 7.2K关注 0票数 7

在Oracle中,什么是仅插入的物化视图?

我有以下物化视图,它使用MAX聚合函数:

代码语言:javascript
复制
CREATE MATERIALIZED VIEW VM_FAST_MAX
REFRESH FAST ON COMMIT
AS
SELECT   d.ID_INPUT, MAX(d.ID_LOAD) AS ID_LOAD, COUNT(*) AS CNT
FROM     MASTER_TABLE d
GROUP BY d.ID_INPUT;

根据Oracle数据仓库指南,它应该是一个仅插入的物化视图。

如果物化视图有以下之一,则仅在常规DML插入和直接加载时才支持快速刷新。

  • 使用MIN或MAX聚合的物化视图
  • 具有SUM(expr)但没有计数(Expr)的物化视图
  • 没有计数的物化视图(*)

这样的物化视图称为仅插入的物化视图.

我希望这样的物化视图只有在插入主表时才能快速刷新。相反,DBMS_MVIEW.EXPLAIN_MVIEW告诉我这个物化视图总是可以快速刷新的:

代码语言:javascript
复制
EXEC DBMS_MVIEW.EXPLAIN_MVIEW('VM_FAST_MAX');
SELECT CAPABILITY_NAME, POSSIBLE
FROM MV_CAPABILITIES_TABLE
WHERE MVNAME = 'VM_FAST_MAX';

CAPABILITY_NAME                P
------------------------------ -
REFRESH_FAST_AFTER_INSERT      Y
REFRESH_FAST_AFTER_ANY_DML     Y

即使在主表更新之后,提交上的快速刷新也是有效的。

概述:

  • 仅插入的物化视图和普通的、快速刷新的物化视图之间有什么区别?
  • 为什么Oracle文档对我撒谎?)

使用Oracle 11.2企业版。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-10 12:01:34

常规的快速可刷新mview与仅插入的mview之间的区别是,仅插入的可刷新mview只能在插入状态集之后才能快速刷新,而不能在任何其他DML操作(例如删除和更新)之后被快速刷新。

我假设这种限制背后的逻辑是,当您更新一个现有值时,Oracle无法仅通过mlog表知道新的最大值是什么(它必须保持某种级别才能做到这一点)。

关于功能表-这很奇怪。检查这个页面 -这做了相同的测试,但在他们的例子中,他们得到

代码语言:javascript
复制
Capable of:
  REFRESH_FAST
  REFRESH_FAST_AFTER_INSERT
Not Capable of:
  REFRESH_FAST_AFTER_ONETAB_DML
    AMT_SUM
    SUM(expr) without COUNT(expr)
  REFRESH_FAST_AFTER_ONETAB_DML
    COUNT(*) is not present in the select list
  REFRESH_FAST_AFTER_ANY_DML
    see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled

您是否尝试过在更新后执行快速刷新?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17021094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档