我开始使用快速刷新的物化视图,我想知道为什么在我只希望插入几个插入的情况下,为什么会有这么多的插入和删除。
在以下测试设置中,我希望仅插入一个,但是在快速刷新mview时,将插入两个插入和一个删除。为什么会有两个插入和一个删除? (在进行完全刷新时,按预期只有一个插入。)
CREATE TABLE tparent (
id number(10)
,description varchar2(10)
,CONSTRAINT tparent_pk PRIMARY KEY (id)
);
CREATE TABLE tchild (
id number(10)
,parentId number(10)
,description varchar2(10)
,CONSTRAINT tchild_pk PRIMARY KEY (id)
);
CREATE MATERIALIZED VIEW LOG ON tparent WITH ROWID;
CREATE MATERIALIZED VIEW LOG ON tchild WITH ROWID;
CREATE MATERIALIZED VIEW mvfamily
BUILD IMMEDIATE
REFRESH FAST ON DEMAND
AS
SELECT p.id parentId
, p.description parentDescr
, c.id childId
, c.description childDescr
, p.rowid parentRowid
, c.rowid childRowid
FROM tparent p
, tchild c
WHERE p.id = c.parentId
;
INSERT INTO tparent VALUES (1, 'parent 1');
INSERT INTO tchild VALUES (1, 1, 'child 1');
COMMIT;
EXEC DBMS_MVIEW.REFRESH(list=>'MVFAMILY',method=>'F');
检查user_tab_modifications显示,在实例化视图上已完成两次插入和一次删除。总而言之,这显然是正确的,但是为什么快速刷新不仅可以插入一次?
SELECT table_name, inserts, updates, deletes
FROM user_tab_modifications
WHERE table_name = 'MVFAMILY';
TABLE_NAME INSERTS UPDATES DELETES
------------ ---------- ---------- ----------
MVFAMILY 2 0 1