1. 程式人生 > >讀高效能mysql感--5--索引

讀高效能mysql感--5--索引

建立高效能的索引

索引可以讓伺服器快速定位到表的位置,附加作用,B-Tree索引,按照順序排序,所以mysql可以 order by  和group by操作因為資料是有序的,所以B-TREE也會將相關列值都儲存在一起。索引中儲存了實際的列值索引使用索引就能完成全部查詢。

   總結索引的優點:

                         1.索引大大減少伺服器掃描的資料量

                          2.索引可以幫助伺服器避免排序和臨時表

                          3.索引可以將隨機IO變為順序IO

 

索引是最好的解決方案嗎?

  索引不是最好的工具,但索引能夠幫助儲存引擎快速找到記錄帶來的好處。高效的索引才是有效的。小的表全表掃描更有效。中大型表,索引非常有效,但對於特大型表,建立和使用索引的代價隨之增長,這種情況下,可以使用分區分出查詢的一組資料,而不是一條一條的記錄匹配。

 

 

高效能索策略

獨立的列

是指索引的列不是表示式的一部分,也不是函式的引數

 -------->  select actor_id from actor where actor_id+1=5;

where的表示式等價於 actor_id=4,mysql無法解析這個方程式,使用者行為,應該始終將索引單獨放在比較符號的一側

 

字首索引和索引的選擇性

 

為什麼需要??????----------->有時需要索引很長的字元列,這會讓索引變得大且慢。

即可以索引開始部分字元,這樣可以節約索引的空間,提高索引的效率,但這樣會降低索引的選擇性(掃描的字首越短,重複越多,葉子節點也就越多)。

選擇性--------->  不重複的索引值/資料表記錄總數(#T)    範圍1/#T 到1之間。唯一索引的選擇性是1.這是最好的索引選擇性,效能最好。

 

選擇足夠長的淺醉保證比較高的選擇性,同時又能太長(以便節約空間),字首的基數應該接近於完整列的基數

不能光看平均選擇性,也要看資料分佈的均勻性。

平均選擇性

資料均衡展示

 

建立字首索引:---------->  ALTER TABLE city_demo add key(city(7));

缺點:無法使用字首索引做order by 和group by,也無法使用字首索引做覆蓋掃描

為什麼?-------->因為不是對整個欄位做索引,所以無法按照順序進行儲存資料

資料參考:https://www.cnblogs.com/gomysql/p/3628926.html