今天聽DBA説如果從一個表批量查詢出一批數據之後批量插入另外一張表的優化方案:
1)不寫歸檔日誌;
2)採用獨佔
關於insert /*+ append */我們需要注意以下三點:
a、非歸檔模式下,只需append就能大量減少redo的產生;歸檔模式下,只有append+nologging才能大量減少redo。
b、insert /*+ append */時會對錶加鎖(排它鎖),會阻塞表上的除了select以外所有DML語句;
1 --不寫日誌設置
2 ALTER TABLE my_flosta_all_571 NOLOGGING;
3
4 insert /*+APPEND */ into my_flosta_all_571(OID,P_DAY,CITY,BUILDINGID,BUILDINGNAME,HASINDOOR)
5 select OID,to_date('20180103','yyyyMMdd') as P_DAY,CITY,BUILDINGID,BUILDINGNAME,HASINDOOR
6 from my_flosta_all_571 where p_day=to_date('20171231','yyyyMMdd');
7 commit;
8
9 insert /*+APPEND */ into my_flosta_all_571(OID,P_DAY,CITY,BUILDINGID,BUILDINGNAME,HASINDOOR)
10 select OID,to_date('20180104','yyyyMMdd') as P_DAY,CITY,BUILDINGID,BUILDINGNAME,HASINDOOR
11 from my_flosta_all_571 where p_day=to_date('20171231','yyyyMMdd');
12 commit;