sqlserver查詢性能優化之nolock


在sqlserver中,對數據量不斷膨脹的表,隨時間的推移,數據會越來越多。

從而查詢會越來越慢,影響程序性能。

在允許臟讀的情況下,我們可以使用WITH(NOLOCK)避免鎖定數據,提升查詢性能。

臟讀的即可能是在事務中執行(增刪改),但未提交的數據,該數據后面可能被事務回滾。

例:select * from MyTable with(nolock)

解讀:

1.當我們在執行select操作時,會對MyTable 加上共享鎖。也就是此時我們對MyTable 表只能執行讀取操作。

在表名后加上with(nolock),即表明不會對表加任何鎖。

2.若我們對MyTable 執行insert,update,delete操作時,這三類操作都會對MyTable表加上排他鎖,

即這類操作執行時,其他操作必須等待。此時若在事務中存在此類操作,加上with(nolock)的查詢操作就會出現臟讀。

場景:

  若我們程序在select大數據量表時,此時查詢時間較長,若同時程序其他地方也對該表進行insert,update,delete操作時,

就會排隊等待select執行結束,當等待時間超過默認時間,該操作就會因為等待超時而失敗。

處理:

  加上with(nolock)可不受鎖影響,直接讀取數據。

 

Do you remember when we were two beautiful birds? We would

light up the sky when we'd fly....

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM