gpt4 book ai didi

Oracle:仅插入物化 View

转载 作者:行者123 更新时间:2023-12-02 06:45:59 25 4
gpt4 key购买 nike

在 Oracle 中,什么是仅插入物化 View ?

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

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 Data Warehousing Guide ,它应该是一个仅插入物化 View :

If the materialized view has one of the following, then fast refresh is supported only on conventional DML inserts and direct loads.

  • Materialized views with MIN or MAX aggregates
  • Materialized views which have SUM(expr) but no COUNT(expr)
  • Materialized views without COUNT(*)

Such a materialized view is called an insert-only materialized view.

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

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

即使在主表更新后,提交时的快速刷新仍然有效。

回顾一下:

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

使用 Oracle 11.2 企业版。

最佳答案

常规快速可刷新 mview 和仅插入 mview 之间的区别 - 正如您所说 - 仅插入可刷新 mview 只能在插入语句之后快速刷新,而不能在任何插入语句之后快速刷新其他DML操作(例如删除和更新)

我认为限制背后的逻辑是,当您更新现有值时,Oracle 无法仅通过 mlog 表知道新的最大值是多少(它必须保持某种排名才能做到这一点) )。

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

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

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

关于Oracle:仅插入物化 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17021094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com