SQL Server應用程序性能調優(yōu)之SQL編程
如何優(yōu)化應用程序的SQL Server編程
現(xiàn)在,應用程序和數據庫設計應該已經完成,而且都使用快速原型技術進行了性能和可擴展性的測試?,F(xiàn)在我們需要為應用程序編寫與SQL Server協(xié)同的代碼。
如何進行應用程序編程,對性能和可擴展性也有很大影響,就如同數據庫設計和整體應用程序設計對性能的影響一樣。有的時候,選擇一個更適合的簡單編程技巧就可以帶來較大的性能提高。實現(xiàn)一個任務的代碼可能有很多種,不過獲得最優(yōu)性能的往往只有一個。
如何優(yōu)化你的T-SQL代碼
和任何編程語言一樣,T-SQL提供了多種方式來實現(xiàn)同一個任務。其中有的方法所實現(xiàn)的性能要高于其它方法。在這一部分中,我將向大家介紹一些編寫高性能T-SQL代碼的訣竅。
選擇合適的數據類型:數據類型選擇好,可以大大提高SQL Server執(zhí)行SELECT、INSERT、UPDATE和DELETE操作的速度。不過,選擇最優(yōu)的數據類型并不總是一件很簡單的事情。在創(chuàng)建SQL Server物理表的時候,以下建議可以有助于獲得最優(yōu)性能。
選擇能滿足你需要的最小數據類型。例如,如果某一列需要存儲的是數字1到10,那么該列的數據類型選擇TINYINT會比INT更好。CHAR和VARCHAR的選擇也是遵循同樣的原則。另外,對于字符列的字符數不要設定太大,滿足自己需要就可以,這樣SQL Server能夠在其數據和索引頁面中存儲更多行記錄,降低讀取它們時所需的I/O次數。另外,它將減少從服務器移動到客戶端的數據量,降低網絡流量和延時。
如果某一列的文本數據在長度上差別很大,使用VARCHAR數據類型來取代CHAR數據類型。盡管VARCHAR數據類型比CHAR數據類型的開銷略微有些大,但是使用VARCHAR數據類型可以大大節(jié)省空間,可以降低I/O,提高整體SQL Server性能。
除非你需要存儲Unicode數據,不要使用NVARCHAR或NCHAR數據類型。它們所占用的空間是VARCHAR或CHAR的兩倍,可以增加服務器I/O開銷。
如果你需要存儲較大的字符串數據,而且它們不超過8000字符,那么最好使用VARCHAR數據類型,而不要使用TEXT數據類型。TEXT數據類型開銷較大,會降低性能。
如果有一列只用來存儲數字,使用數值型數據類型,諸如INTERGER,而不要使用VARCHAR或CHAR數據類型。Numeric數據類型一般會需要較小的空間來存儲數值。這樣有助于降低數據列的大小,而且當列內容被搜索或與其它列聯(lián)合時,可以提高性能。
謹慎使用觸發(fā)器
在T-SQL中,觸發(fā)器是一個強大的工具,但是由于它們每次被執(zhí)行的時候,需要對表進行INSERT、UPDATE或DELETE操作,這可能帶來大量開銷。以下是如何優(yōu)化觸發(fā)器性能的一些技巧。
保持觸發(fā)器中的代碼最精簡以降低開銷。觸發(fā)器中運行的代碼越多,它所進行的每一個INSERT、UPDATE和DELETE就會越慢。
不過某個任務可以使用更高效的技術實現(xiàn),就不要使用觸發(fā)器。
盡量不要使用回滾觸發(fā)器,因為其相關開銷太大。與其讓觸發(fā)器發(fā)現(xiàn)問題后對事務處理進行回滾操作,不如在它進入觸發(fā)器之前就捕獲該錯誤。與讓觸發(fā)器回滾相比,在觸發(fā)器啟動之前提前發(fā)現(xiàn)錯誤會消耗更少的服務器資源。
【編輯推薦】