1、索引幫助mysql高效獲取數據排好序的數據結構。mysql
2、索引存儲位置:磁盤文件。sql
3、索引結構:二叉樹、紅黑樹、hash、BTree、B+Tree 。索引結構爲了更快找到目標數據。數組
4、數據結構數據結構
4.一、二叉樹函數
定義:每一個結點最多有兩個子樹,左子樹比父節點小,右子樹比父節點大。優化
缺點:會出現極端狀況致使整棵樹只有左子樹或只有右子樹。指針
圖:blog
4.二、紅黑樹索引
定義:get
缺點:數據量大會致使樹層數比較多,這樣就會形成查找數據慢。
圖:
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做爲索引效率比較低?