C# & SQL效能考量(Performance)

1、批次更新或刪除

如需批次Update、Delete資料,盡量避免於迴圈中執行多次Update,
可於迴圈中逐筆取出id,以ids陣列執行一次性Update即可,可有效減低DB Server Loading,並避免Data Lock。

當使用Manager物件來Update DB時,在Transcation未完成Commit前,MS-SQL會產生Table Lock,導致無法對該資料表執行Select動作。
雖可以透過SQL指令變更該表Lock層級,關閉Table Lock,但此法為破壞性修改,並不建議使用,而在Oracle中雖然只會產生Row Lock,不影響Select,但還是從養成DB良好正確操作習慣改善較好。

SQL指令變更該表Lock層級可以透過下述設定,
限制該Table僅能用Table Lock:

查MS-SQL進程T-SQL:


56-1

MS-SQL 查出TABLE LOCK的名稱 & ID:

2、WITH (NOLOCK)

當執行Select with (nolock)時,雖會提升查詢效率及避免Lock無法讀取資料,但如果後面有異動資料會造成資料失真。
切記以WITH (NOLOCK)執行時,要抓取未曾被異動的欄位值才會正確。

3、DataTable的Select過濾

善用DataTable的Select過濾功能處理資料,避免重複執行Select。
可直接對Select出的DataRow進行迴圈操作,或透過Clone方式複製DataTable結構轉成過濾後的資料再處理。

4、非同步方式

MS-SQL遇大量資料需查詢時請改用非同步方式,避免SQL Time Out發生。

也可看看

[實作]有效增進WordPress網站速度

建立一個高品質、成功的網站,網站速度是一個非常重要的課題!

發表迴響