हां, ऐसा लगता है कि COL_2 को अद्यतन करने से दृश्य को भी ताज़ा किया जाता है।
COL_2 को अपडेट करना भौतिक दृश्य के बिना समान तालिका पर तुलनात्मक अद्यतन की तुलना में अधिक संसाधनों का उपयोग करता है। और COL_2 अपडेट करने से भौतिक दृश्य के पंक्ति टाइमस्टैम्प (ORA_ROWSCN) को अपडेट किया जाएगा।
-------
--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
स्रोत
2011-03-05 05:41:30
धन्यवाद, यह बहुत व्यापक है। – Johnny5
मेरा अनुमान है कि भौतिक दृश्य लॉग यह निर्धारित करता है। तो यदि आप केवल col1 पर एक भौतिक दृश्य लॉग बनाते हैं, तो मुझे लगता है कि col2 को अपडेट करने से अब कोई प्रभाव नहीं पड़ेगा, सही? – nathanvda