SQL優化

提升效率
  • 查詢時,先將數據從數據庫查出來,然後再做函數處理,儘量減少佔用數據庫連接(事務)的時間
  • 若數據量比較少,不超過100條記錄,不需要使用索引
  • where條件及orderBy字段上建立索引,但一張表中最多不能超過6個索引
  • union all會查詢出相同的記錄,而且不對結果集進行排序;union 會過濾掉重複的數據,而且按照字母的順序排序(自然排序),性能較union all差;如果確定查詢結果不重複且對順序沒有要求,使用union all效率高許多
  • 若表中索引爲複合索引,那麼作爲where條件的第一個字段須是複合索引的第一個字段,若where條件不使用複合索引的第一個字段,則不會使用該索引,會導致全表掃描
  • Student表中僅存在一個由三個列name,age,address組成的複合索引, where條件中只是用到了name,address兩個過濾條件,那麼只有name這一列應用到了該複合索引
  • 若表中存在大量重複數據,例如sex列,malefemale幾乎各佔一半,不會使用索引,應當把索引建立在區分度比較高的列
  • clustered索引列插入一條記錄,將引起全表數據順序的調整,耗費相當大的資源
  • 儘量使用數字類型列,因爲執行引擎在執行連接和查詢時,對於數字類型只需要比較一次,而字符類型要從首字母開始匹配。
  • 儘量避免向客戶端輸出大量數據,或者存在大事務操作,以提高系統的併發能力
避免以下引起全表掃描的語句
  • where條件中存在=null判斷
  • 前置%not in的使用
  • where條件中使用函數或者表達式計算
  • where條件使用or分割條件,若其中一個條件沒有使用索引,那麼被or連接的多個條件都不使用索引,執行全表掃描
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章