SQL語句優(yōu)化提升整體效能
針對(duì)性地對(duì)一些耗資源嚴(yán)重的具體應(yīng)用進(jìn)行優(yōu)化
出現(xiàn)效能問題時(shí),首先要做的是什么?這個(gè)問題我問過不少同事,有人說憑經(jīng)驗(yàn)對(duì)出問題的sql進(jìn)行優(yōu)化,如我們一般說的要合理使用索引,盡量不要使用前面帶*號(hào)的Like語句,不要再比較操作符前邊進(jìn)行計(jì)算或使用函數(shù)等等,這些道路都是對(duì)的,但經(jīng)驗(yàn)有時(shí)候不一定能解決問題。問題出現(xiàn)時(shí),首先要做的是確定問題點(diǎn)是什么,只有正確的找到問題后才能有針對(duì)性的解決問題。下面簡(jiǎn)單介紹我們一般從哪些角度入手,來確定問題所在。
1、首先從業(yè)務(wù)上理解該處功能,理解用戶的真正意圖,用戶真正關(guān)注的是什么,想要的是什么數(shù)據(jù),是否有變通簡(jiǎn)潔的方法達(dá)到用戶要求。而非使用復(fù)雜sql查詢。其實(shí)有些時(shí)候進(jìn)行變通的修改,同樣能達(dá)到目的,但是采用的sql語句已經(jīng)極大地簡(jiǎn)化了。這是解決效能問題的優(yōu)先要考慮的。
2、對(duì)固定的sql進(jìn)行優(yōu)化時(shí),一定要關(guān)注查詢相關(guān)的數(shù)據(jù)量,關(guān)注數(shù)據(jù)量的大小,有些時(shí)候用戶進(jìn)行一個(gè)查詢,若沒有處理好查詢條件的話,返回的記錄集合太大,這對(duì)用戶來說,其實(shí)意義不大,關(guān)鍵是這樣必然會(huì)導(dǎo)致較多的磁盤IO,效能問題是必然的。除非是用戶真的需要這么多數(shù)據(jù),但事實(shí)證明,多數(shù)都不是的,所以著眼點(diǎn)是怎樣限制返回的記錄集的大小或查詢中使用的臨時(shí)中間數(shù)據(jù)集合的大小。這樣才能使你的優(yōu)化達(dá)到效果,起到作用。
下面簡(jiǎn)單介紹幾種常用的檢查問題sql的方法。
當(dāng)然其中是有些技巧的,如:
1、使用 set statistics io on 檢查實(shí)際的磁盤IO信息,物理讀、邏輯讀等信息,這個(gè)是一個(gè)簡(jiǎn)單有效的參考數(shù)據(jù),在筆者以往的經(jīng)驗(yàn)中,也是主要的參考數(shù)據(jù)。
在查詢分析器中貼出問題sql,使用set statistics io 為on,也可以在空白處點(diǎn)擊右鍵,選擇<查詢選項(xiàng)>,
選擇<高級(jí)>
勾選Set Statistics Io 。
運(yùn)行查詢,除了得到結(jié)果集合以外,還可以得到本次查詢相關(guān)的IO信息,如下圖:
posted on 2012-07-05 09:13 順其自然EVO 閱讀(248) 評(píng)論(0) 編輯 收藏 所屬分類: 數(shù)據(jù)庫(kù)