數據庫優化實踐【tsql篇】
在前面我們介紹了如何正確使用索引,調整索引是見效最快的性能調優方法,但一般而言,調整索引只會提高查詢性能。除此之外,我們還可以調整數據訪問代碼和tsql,本文就介紹如何以最優的方法重構數據訪問代碼和tsql。
第四步:將TSQL代碼從應用程序遷移到數據庫中
也許你不喜歡我的這個建議,你或你的團隊可能已經有一個默認的潛規則,那就是使用ORM(Object Relational Mapping,即對象關系映射)生成所有SQL,并將SQL放在應用程序中,但如果你要優化數據訪問性能,或需要調試應用程序性能問題,我建議你將SQL代碼移植到數據庫上(使用存儲過程,視圖,函數和觸發器),原因如下:
1、使用存儲過程,視圖,函數和觸發器實現應用程序中SQL代碼的功能有助于減少應用程序中SQL復制的弊端,因為現在只在一個地方集中處理SQL,為以后的代碼復用打下了良好的基礎。
2、使用數據庫對象實現所有的TSQL有助于分析TSQL的性能問題,同時有助于你集中管理TSQL代碼。
3、將TS QL移植到數據庫上去后,可以更好地重構TSQL代碼,以利用數據庫的高級索引特性。此外,應用程序中沒了SQL代碼也將更加簡潔。
雖然這一步可能不會象前三步那樣立竿見影,但做這一步的主要目的是為后面的優化步驟打下基礎。如果在你的應用程序中使用ORM(如NHibernate)實現了數據訪問例行程序,在測試或開發環境中你可能發現它們工作得很好,但在生產數據庫上卻可能遇到問題,這時你可能需要反思基于ORM的數據訪問邏輯,利用TSQL對象實現數據訪問例行程序是一種好辦法,這樣做有更多的機會從數據庫角度來優化性能。
我向你保證,如果你花1-2人月來完成遷移,那以后肯定不止節約1-2人年的的成本。
OK!假設你已經照我的做的了,完全將TSQL遷移到數據庫上去了,下面就進入正題吧!
第五步:識別低效TSQL,采用最佳實踐重構和應用TSQL
由于每個程序員的能力和習慣都不一樣,他們編寫的TSQL可能風格各異,部分代碼可能不是最佳實現,對于水平一般的程序員可能首先想到的是編寫TSQL實現需求,至于性能問題日后再說,因此在開發和測試時可能發現不了問題。
也有一些人知道最佳實踐,但在編寫代碼時由于種種原因沒有采用最佳實踐,等到用戶發飆的那天才乖乖地重新埋頭思考最佳實踐。
我覺得還是有必要介紹一下具有都有哪些最佳實踐。
1、在查詢中不要使用“select *”
(1)檢索不必要的列會帶來額外的系統開銷,有句話叫做“該省的則省”;
(2)數據庫不能利用“覆蓋索引”的優點,因此查詢緩慢。
2、在select清單中避免不必要的列,在連接條件中避免不必要的表
?以上就是數據庫優化實踐【TSQL篇】的內容,更多相關文章請關注PHP中文網(www.php.cn)!?