在 Oracle 中,什么是仅插入物化视图?
我有以下使用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,它应该是一个仅插入的物化视图:
如果物化视图具有以下条件之一,则仅在常规 DML 插入和直接加载上支持快速刷新。
- 具有 MIN 或 MAX 聚合的物化视图
- 具有 SUM(expr) 但没有 COUNT(expr) 的物化视图
- 没有 COUNT(*) 的物化视图
这样的物化视图称为仅插入物化视图。
我希望这样的物化视图只有在插入主表时才能快速刷新。相反,DBMS_MVIEW.EXPLAIN_MVIEW
告诉我这个物化视图总是可以快速刷新:
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 企业版。