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