SQL性能優化的幾個思路

  其實SQL性能優化的本質就是減少運算次數、減少內存消耗、涉及儘量少的數據,建立索引、優化表格結構等手法均爲此目的。


  1、建立索引,目的是避免全表掃描。索引一般建立在WHERE、GROUP、JOIN經常使用的字段上,字段需要擁有這樣的特點:數據行比較多,至少要過10萬;字段的值項較多,至少要超過10個,比如某個字段的值只可能是1或0,建立索引就是浪費。另外索引的建立應秉持最少原則,一張數據表上能不建索引就不建,因爲建多了對內存的消耗很厲害,一般情況下索引的數量爲字段數量/10上下即可


  2、字段冗餘,目的是減少表格關聯。很多表格中存有其他表格的主鍵,用於作表格關聯,事實上如果只需要用到其他表格的一兩個字段,完全可以把這兩個字段都加到表格中作冗餘數據。比如常見的數據操作人,僅在數據表中加入操作人ID,取數據的時候往往要關聯用戶表,如果加入操作人姓名就無需關聯。還有很多字典數據,把ID和內容都加進去就不需要關聯字典表,減少性能消耗。


  3、統一數據類型,目的是減少數據轉換量。在兩張表格中,存在一個含義完全一致的字段,但是它們的數據類型不一樣,那麼在使用它們進行表格關聯時,系統就會自動進行數據轉換,無形中增加運算量。比如都有退款單ID這個字段,一張表中設計爲int,另一張表中設計爲varchar,那麼查詢時系統就會自動把int轉爲varchar,數據運算量大增。在where子句中也是如此,如“column1=1”,如果column1是數字型,後面的1就不用加單引號,否則就一定要加上,避免數據轉換


  4、不對字段進行運算。column1=2-1比column1+1=2好,column1>='2019-01-01' and column1<'2019-01-02'比Convert(varchar(10),column1,120)='2019-01-01'好,因爲前一種寫法都是對字段上的所有數據進行運算,後一種寫法只對過濾的值進行運算,後面的運算量明顯要高出前面很多倍


  5、儘量少查數據。比如判斷是否存在指定數據時,用count(1)涉及的數據可能有很多,但用top 1就最多一條,誰優誰劣一目瞭然。


  6、儘量不在索引列上使用not、<>、!=、IS NULL、IS NOT NULL,因爲這些關鍵字都會造成全表掃描,索引建了也沒用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章