物化視圖會根據查詢的定義,將視圖查詢結果存到某個真實的表中,當重物化視圖中查詢數據的時候,Oracle不會再去搜索具體的基表,這會大大的提高效率,先說說創建物化視圖的語法
create materialized view materialized_emp_dept as
創建物化視圖,需要有 create materialized view 的權限,我是以scott的身份登錄的,所以從新用SYS登錄
執行
grant create materialized view to scott;
然後創建物化視圖
create materialized view materialized_emp_dept as
select e.empno,e.ename,e.job,d.dname
from emp e left join dept d on e.deptno = d.deptno
執行查詢
select count(*) from materialized_emp_dept;
得到14條數據
現在我們往基表emp中插入一條數據再來看看
insert into emp values(9999,'Jack','Soft',7902,null,1423,132,30)
執行後基表數據已經添加一行,但物化視圖中的數據仍然爲14條
所以,現在必須手動去刷新物化視圖
exec dbms_mview.refresh('materialized_emp_dept');/
再查詢物化視圖後的數據變成了15條
此外,我們也可以不手動刷新
如果當基表數據更新時,自動刷新物化視圖
alter materialized view my_view refresh on commit;
當讀寫頻繁且數據量大很的時候,該方法並不可取