索引優化策略

索引優化策略

  • 最左前綴匹配原則,上面講到了

  • 主鍵外檢一定要建索引

  • 對 where,on,group by,order by 中出現的列使用索引

  • 儘量選擇區分度高的列作爲索引,區分度的公式是count(distinct col)/count(*),表示字段不重複的比例,比例越大我們掃描的記錄數越少,唯一鍵的區分度是1,而一些狀態、性別字段可能在大數據面前區分度就是0

  • 對較小的數據列使用索引,這樣會使索引文件更小,同時內存中也可以裝載更多的索引鍵

  • 索引列不能參與計算,保持列“乾淨”,比如fromunixtime(createtime) = ’2014-05-29’就不能使用到索引,原因很簡單,b+樹中存的都是數據表中的字段值,但進行檢索時,需要把所有元素都應用函數才能比較,顯然成本太大。所以語句應該寫成createtime = unixtimestamp(’2014-05-29’);

  • 爲較長的字符串使用前綴索引

  • 儘量的擴展索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那麼只需要修改原來的索引即可

  • 不要過多創建索引, 權衡索引個數與DML之間關係,DML也就是插入、刪除數據操作。這裏需要權衡一個問題,建立索引的目的是爲了提高查詢效率的,但建立的索引過多,會影響插入、刪除數據的速度,因爲我們修改的表數據,索引也需要進行調整重建

  • 對於like查詢,”%”不要放在前面。


 
  1. SELECT * FROMhoudunwangWHEREunameLIKE'後盾%' -- 走索引

  2. SELECT * FROMhoudunwangWHEREunameLIKE "%後盾%" -- 不走索引

  • 查詢where條件數據類型不匹配也無法使用索引

  • 正則表達式不使用索引,這應該很好理解,所以爲什麼在SQL中很難看到regexp關鍵字的原因

引用於:https://blog.csdn.net/suifeng3051/article/details/52669644

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