SQL Server應用程序性能調優之SQL編程
如何優化應用程序的SQL Server編程
現在,應用程序和數據庫設計應該已經完成,而且都使用快速原型技術進行了性能和可擴展性的測試,F在我們需要為應用程序編寫與SQL Server協同的代碼。
如何進行應用程序編程,對性能和可擴展性也有很大影響,就如同數據庫設計和整體應用程序設計對性能的影響一樣。有的時候,選擇一個更適合的簡單編程技巧就可以帶來較大的性能提高。實現一個任務的代碼可能有很多種,不過獲得最優性能的往往只有一個。
如何優化你的T-SQL代碼
和任何編程語言一樣,T-SQL提供了多種方式來實現同一個任務。其中有的方法所實現的性能要高于其它方法。在這一部分中,我將向大家介紹一些編寫高性能T-SQL代碼的訣竅。
選擇合適的數據類型:數據類型選擇好,可以大大提高SQL Server執行SELECT、INSERT、UPDATE和DELETE操作的速度。不過,選擇最優的數據類型并不總是一件很簡單的事情。在創建SQL Server物理表的時候,以下建議可以有助于獲得最優性能。
選擇能滿足你需要的最小數據類型。例如,如果某一列需要存儲的是數字1到10,那么該列的數據類型選擇TINYINT會比INT更好。CHAR和VARCHAR的選擇也是遵循同樣的原則。另外,對于字符列的字符數不要設定太大,滿足自己需要就可以,這樣SQL Server能夠在其數據和索引頁面中存儲更多行記錄,降低讀取它們時所需的I/O次數。另外,它將減少從服務器移動到客戶端的數據量,降低網絡流量和延時。
如果某一列的文本數據在長度上差別很大,使用VARCHAR數據類型來取代CHAR數據類型。盡管VARCHAR數據類型比CHAR數據類型的開銷略微有些大,但是使用VARCHAR數據類型可以大大節省空間,可以降低I/O,提高整體SQL Server性能。
除非你需要存儲Unicode數據,不要使用NVARCHAR或NCHAR數據類型。它們所占用的空間是VARCHAR或CHAR的兩倍,可以增加服務器I/O開銷。
如果你需要存儲較大的字符串數據,而且它們不超過8000字符,那么最好使用VARCHAR數據類型,而不要使用TEXT數據類型。TEXT數據類型開銷較大,會降低性能。
如果有一列只用來存儲數字,使用數值型數據類型,諸如INTERGER,而不要使用VARCHAR或CHAR數據類型。Numeric數據類型一般會需要較小的空間來存儲數值。這樣有助于降低數據列的大小,而且當列內容被搜索或與其它列聯合時,可以提高性能。
謹慎使用觸發器
在T-SQL中,觸發器是一個強大的工具,但是由于它們每次被執行的時候,需要對表進行INSERT、UPDATE或DELETE操作,這可能帶來大量開銷。以下是如何優化觸發器性能的一些技巧。
保持觸發器中的代碼最精簡以降低開銷。觸發器中運行的代碼越多,它所進行的每一個INSERT、UPDATE和DELETE就會越慢。
不過某個任務可以使用更高效的技術實現,就不要使用觸發器。
盡量不要使用回滾觸發器,因為其相關開銷太大。與其讓觸發器發現問題后對事務處理進行回滾操作,不如在它進入觸發器之前就捕獲該錯誤。與讓觸發器回滾相比,在觸發器啟動之前提前發現錯誤會消耗更少的服務器資源。
關鍵字:SQL編程
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解