Ja, es scheint, dass das Aktualisieren von COL_2 auch die Ansicht aktualisiert.
Das Aktualisieren von COL_2 verwendet mehr Ressourcen als ein vergleichbares Update auf einer ähnlichen Tabelle ohne materialisierte Ansicht. Und das Aktualisieren von COL_2 aktualisiert den Zeilenzeitstempel (ORA_ROWSCN) der materialisierten Ansicht.
-------
--Vergleichen Sie die Menge der durchgeführten Arbeit.
--Der Unterschied ist nicht riesig, aber signifikant und konsistent.
-------
--Tabelle und materialisierte Ansicht erstellen
create table table1 (col_1 number primary key, col_2 number);
create materialized view log on table1;
create materialized view table1_mv refresh fast on commit
as select col_1 from table1;
insert into table1 values(1, 1);
commit;
--Eine reguläre Tabelle zum Vergleich erstellen
create table table2 (col_1 number primary key, col_2 number);
insert into table2 values(1, 1);
commit;
--Die Abfragen parsen, damit die Traces diese Arbeit nicht zählen.
update table1 set col_1 = 2;
update table1 set col_2 = 2;
update table2 set col_1 = 2;
update table2 set col_2 = 2;
rollback;
set autotrace on
alter system flush buffer_cache;
update table1 set col_1 = 2;
-- 11 db block gets
-- 8 consistent gets
-- 13 physical reads
rollback;
alter system flush buffer_cache;
update table1 set col_2 = 2;
-- 6 db block gets
-- 8 consistent gets
-- 12 physical reads
rollback;
alter system flush buffer_cache;
update table2 set col_1 = 2;
-- 7 db block gets
-- 7 consistent gets
-- 9 physical reads
rollback;
alter system flush buffer_cache;
update table2 set col_2 = 2;
-- 3 db block gets
-- 7 consistent gets
-- 8 physical reads
set autotrace off
-------
--Vergleichen Sie ORA_ROWSCN.
--Die Zeiten sind unterschiedlich, was darauf hindeutet, dass die materialisierte Ansicht geändert wurde.
-------
--(Sie müssen diese Schritte möglicherweise langsam ausführen, um sie zu reproduzieren. ORA_ROWSCN ist
--nicht perfekt, manchmal sehen Sie den gleichen Zeitstempel.)
select scn_to_timestamp(ora_rowscn) from table1_mv;
--5. März 2011 00:25:25.000000000
update table1 set col_1 = 3;
commit;
select scn_to_timestamp(ora_rowscn) from table1_mv;
--5. März 2011 00:25:37.000000000
update table1 set col_2 = 3;
commit;
select scn_to_timestamp(ora_rowscn) from table1_mv;
--5. März 2011 00:25:46.000000000