Sí, parece que la actualización de col_2 también refresca la vista.
Actualizando col_2 utiliza más recursos que una actualización comparable sobre una mesa similar sin una vista materializada. Y actualizar COL_2 actualizará la marca de tiempo de la fila (ORA_ROWSCN) de la vista materializada.
-------
--Compare the amount of work done to update.
--The difference isn't huge, but is significant and consistent.
-------
--Create table and materialized view
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;
--Create a regular table for comparison
create table table2 (col_1 number primary key, col_2 number);
insert into table2 values(1, 1);
commit;
--Parse the queries so traces won't count that work.
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
-------
--Compare ORA_ROWSCN.
--The times are different, implying the materialized view was modified.
-------
--(You may need to run these steps slowly to reproduce. ORA_ROWSCN is
--not perfect, sometimes you'll see the same timestamp.)
select scn_to_timestamp(ora_rowscn) from table1_mv;
--3/5/2011 12:25:25.000000000 AM
update table1 set col_1 = 3;
commit;
select scn_to_timestamp(ora_rowscn) from table1_mv;
--3/5/2011 12:25:37.000000000 AM
update table1 set col_2 = 3;
commit;
select scn_to_timestamp(ora_rowscn) from table1_mv;
--3/5/2011 12:25:46.000000000 AM
Gracias, eso es bastante completo. – Johnny5
Supongo que el registro de vista materializada lo determina. Entonces, si creas un registro de vista materializado solo en col1, creo que la actualización de col2 ya no tendrá efecto, ¿correcto? – nathanvda