SQL SERVER 數據庫優化總結

1. 性能優化
   開銷比較大:遊標
   使用不兼容的數據類型:
   無法通過索引,而是全盤掃描:①WHERE字段進行函數式或者表達式操作(儘量將操作移動到等號右邊,即不對列進行操作)、
                               ②避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN
                               ③儘量避免在索引過的字符數據中,使用非打頭字母搜索
   表之間的關聯條件有多個時,需要將所有條件都關聯起來,否則可能搜索結果不精確或搜索效率降低
   消除對大型錶行數據的順序存取
       儘管在所有的檢查列上都有索引,但某些形式的WHERE子句強迫優化器使用順序存取,
       如SELECT * FROM orders WHERE (customer_num=104 AND order_num>1001) OR order_num=1008
   把表的一個子集進行排序並創建視圖,有時能加速查詢,特別是需要聯表的時候。
   能用between就不用IN
   能用UNION ALL就不要用UNION 。UNION ALL不執行SELECT DISTINCT函數,這樣就會減少很多不必要的資源
   儘量不要用SELECT INTO語句。SELECT INOT 語句會導致表鎖定,阻止其他用戶訪問該表
   雖然UPDATE、DELETE語句的寫法基本固定,但是還是對UPDATE語句給點建議:

  a) 儘量不要修改主鍵字段。

  b) 當修改VARCHAR型字段時,儘量使用相同長度內容的值代替。

  c) 儘量最小化對於含有UPDATE觸發器的表的UPDATE操作。

  d) 避免UPDATE將要複製到其他數據庫的列。

  e) 避免UPDATE建有很多索引的列。

  f) 避免UPDATE在WHERE子句條件中的列。

--分析案例
 SELECT DISTINCT A.PeriodID,PeriodName FROM UserMgr_TeachInfo_Period AS A INNER JOIN 
             V_UserMgr_TeachInfo_SubjectGlobalPeriod AS B ON A.PeriodID=B.PeriodID INNER JOIN
             UserMgr_UserInfo_Teacher AS C ON C.SubjectIDs LIKE '%'+B.SubjectID+'%' 
      WHERE A.SchoolID=@SchoolID AND C.UserID=@UserID

--------------------------------------未完待續---------------------------------------

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