索引的優化策略及優缺點
1.最左前綴匹配原則
2.主鍵外檢一定要建索引
3.對 where,on,group by,order by 中出現的列使用索引
4.對較小的數據列使用索引,這樣會使索引文件更小,同時內存中也可以裝載更多的索引鍵
5.索引列不能參與計算,保持列“干凈”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很簡單,b+樹中存的都是數據表中的字段值,但進行檢. 索時,需要把所有元素都應用函數才能比較,顯然成本太大。所以語句應該寫成create_time = unix_timestamp(’2014-05-29’);
6.為較長的字符串使用前綴索引
7.盡量的擴展索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那么只需要修改原來的索引即可
8.對於like查詢,”%”不要放在前面。
1,SELECT * FROMhoudunwangWHEREunameLIKE’后盾%’ – 走索引
2,SELECT * FROMhoudunwangWHEREunameLIKE “%后盾%” – 不走索引
9.查詢where條件數據類型不匹配也無法使用索引
11.字符串與數字比較不使用索引;
CREATE TABLEa(achar(10));
EXPLAIN SELECT * FROMaWHEREa=“1” – 走索引
EXPLAIN SELECT * FROM a WHERE a=1 – 不走索引
正則表達式不使用索引,這應該很好理解,所以為什么在SQL中很難看到regexp關鍵字的原因
11.盡量選擇區分度高的列作為索引,區分度的公式是count(distinct col)/count(*),表示字段不重復的比例,比例越大我們掃描的記錄數越少,唯一鍵的區分度是1,而一些狀態、性別字段可能在大數據面前區分度就是0
12.不要過多創建索引, 權衡索引個數與DML之間關系,DML也就是插入、刪除數據操作。這里需要權衡一個問題,建立索引的目的是為了提高查詢效率的,但建立的索引過多,會影響插入、刪除數據的速度,因為我們修改的表數據,索引也需要進行調整重建
索引優缺點
一、數據庫中創建索引的優缺點
1、創建唯一性索引,保證數據庫表中每一行數據的唯一性。
2、加快數據的檢索速度,這也是創建索引的最主要的原因。
3、減少磁盤IO(向字典一樣可以直接定位)。
4、通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
5、加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
二、數據庫中創建索引的缺點
1、創建索引和維護索引要耗費時間,這種時間隨着數據量的增加而增加。
2、索引需要占用物理空間,特別是聚集索引,需要較大的空間。
3、當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。
