mysql索引本質

1、索引幫助mysql高效獲取數據排好序的數據結構。mysql

2、索引存儲位置:磁盤文件。sql

3、索引結構:二叉樹、紅黑樹、hash、BTree、B+Tree 。索引結構爲了更快找到目標數據。數組

4、數據結構數據結構

4.一、二叉樹函數

定義:每一個結點最多有兩個子樹,左子樹比父節點小,右子樹比父節點大。優化

缺點:會出現極端狀況致使整棵樹只有左子樹或只有右子樹。指針

圖:blog

 

4.二、紅黑樹索引

定義:get

性質1. 節點是紅色或黑色。
性質2. 根節點是黑色。
性質3 每一個紅色節點的兩個子節點都是黑色。(從每一個葉子到根的全部路徑上不能有兩個連續的紅色節點)
性質4. 從任一節點到其每一個葉子的全部路徑都包含相同數目的黑色節點。

缺點:數據量大會致使樹層數比較多,這樣就會形成查找數據慢。

圖:

 

4.三、hash數據結構

定義:散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它經過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數叫作散列函數,存放記錄的數組叫作散列表。 對目標值進行hash運算獲得hash值和數據磁盤指針地址保存到hash表,這樣就達到快速定位數據位置。

缺點:精確查找十分快速,但範圍查找就碰壁了。

圖:無

4.四、BTree

定義:一個節點能夠存儲多個數據,這樣能夠避免黑紅樹的缺點,樹的層數很變小。  

缺點:  節點裏面數組數據:每一個數據的結構=索引數據+數據記錄(即葉子節點存儲鍵值和數據記錄)。

圖:

 

4.五、B+Tree

定義:B+Tree是在B-Tree基礎上的一種優化。節點裏面數組數據:每一個數據只存儲鍵信息,這樣不存數據能夠騰出空間放更多的鍵信息,讓樹層數越小。

  • 非葉子節點只存儲鍵信息。
  • 全部葉子節點之間都有一個鏈指針。
  • 數據記錄都存放在葉子節點中。

缺點:無

 圖:

 

5、mysql採用B+Tree數據結構存儲數據

5.一、B+TREE葉子節點指針做用:定位值比它大的葉子節點。

5.二、引伸出爲何mysql "!="或者「<>」 不走索引。從下圖能夠知道緣由,由於B樹的左節點是比右節點小,並且節點有指針很快能找到範圍的數據,B樹特性+指針的配合這樣能夠快速找到指定範圍數據。

圖:

6、mysql爲何用整型自增做爲索引比較好。而UUID做爲索引效率比較低?

  • 索引存儲在磁盤,並且樹的每一個節點分配的空間有大小。整型佔空間比較小,這樣能夠存放多個鍵值。反之而後UUID佔空間比較大。
  • 整型比較方便,UUID比較須要先轉成ASCII在進行比較
相關文章
相關標籤/搜索