在Oracle中,如何提升DML語句的效率?程序員
如果批量處理海量數據的話一般都是很複雜及緩慢的,方法也不少,可是一般的概念是:分批刪除,逐次提交。下面介紹一下提升DML語句效率的經常使用方法。面試
DML語句sql |
提升DML語句效率用方法數據庫 |
UPDATE服務器 |
① 多字段更新使用一個查詢。微信 ② 將表修改成NOLOGGING模式。網絡 ③ 根據狀況決定是否暫停索引,更新後恢復。避免在更新的過程當中涉及到索引的維護。app ④ 批量更新,每更新一些記錄後及時進行提交動做,避免大量佔用回滾段和臨時表空間。ide ⑤ 能夠建立一個臨時的大的表空間用來應對這些更新動做。學習 ⑥ 加大排序緩衝區。 ⑦ 若是更新的數據量接近整個表,那麼就不該該使用索引而應該採用全表掃描。 ⑧ 若是服務器有多個CPU,那麼能夠採用PARELLEL Hint,能夠大幅度地提升效率。 ⑨ 建表的參數很是重要,對於更新很是頻繁的表,建議加大PCTFREE的值,以保證數據塊中有足夠的空間用於UPDATE。 ⑩ 經過快速遊標更新法,並對ROWID進行排序更新,以下所示: 1DECLARE ⑪ 當須要更新的表是單個或者被更新的字段不須要關聯其它錶帶過來中的數據(例如:外鍵約束),則選擇標準的UPDATE語句,速度最快,穩定性最好,並返回影響條數。若是WHERE條件中的字段加上索引,那麼更新效率就更高。但若須要關聯表更新字段時,UPDATE的效率就很是差。此時能夠採用MERGE且非關聯形式高效完成表對錶的UPDATE操做。 |
INSERT |
① 將表修改成NOLOGGING模式。 ② 暫停索引。 ③ 以APPEND模式插入。 ④ 加入PARALLEL,採用並行插入。 |
DELETE |
① 利用FORALL完成。 ② 利用ROWID或ROW_NUMBER() OVER()高效刪除重複記錄。 ③ 將表修改成NOLOGGING模式。 |
以上這些方法都是拋磚引玉,數據庫優化沒有最好的方法,只有最合適的方法。
& 說明:
有關SQL優化的一些案例能夠參考個人BLOG:http://blog.itpub.net/26736162/viewspace-1254942/、http://blog.itpub.net/26736162/viewspace-1244055/、http://blog.itpub.net/26736162/viewspace-1244050/、http://blog.itpub.net/26736162/viewspace-1244044/、http://blog.itpub.net/26736162/viewspace-1222431/、http://blog.itpub.net/26736162/viewspace-1222423/、http://blog.itpub.net/26736162/viewspace-1218671/、http://blog.itpub.net/26736162/viewspace-1209796/、http://blog.itpub.net/26736162/viewspace-1208814/、http://blog.itpub.net/26736162/viewspace-1684396/、http://blog.itpub.net/26736162/viewspace-2125815/。
本文選自《Oracle程序員面試筆試寶典》,做者:李華榮。
詳細內容能夠添加麥老師微信或QQ私聊。
● 本文做者:小麥苗,只專一於數據庫的技術,更注重技術的運用
● 做者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列題目來源於做者的學習筆記,部分整理自網絡,如有侵權或不當之處還請諒解
● 版權全部,歡迎分享本文,轉載請保留出處
● QQ:646634621 QQ羣:618766405
● 提供OCP、OCM和高可用部分最實用的技能培訓
● 題目解答如有不當之處,還望各位朋友批評指正,共同進步
長按下圖識別二維碼或微信掃描下圖二維碼來關注小麥苗的微信公衆號:xiaomaimiaolhr,學習最實用的數據庫技術。
本文分享自微信公衆號 - DB寶(lhrdba)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。