學習筆記--mysql索引(二) B樹索引的介紹和限制,好索引的標準

Mysql的索引使用最多是B樹索引,使用B樹數據結構來存儲數據,大多數mysql引擎都支持這種索引。但每種存儲引擎實現的方式並不相同,具體的數據結構也不一樣,比如InnoDB使用的是B+樹,在索引中存儲數據和原數據相同,並且根據主鍵引用被索引的行。而MyISAM則使用前綴壓縮技術,索引中存儲的數據是壓縮過的,根據數據物理位置引用被索引的行。
B樹的抽象表示:
這裏寫圖片描述
理解一下這張圖:
1. 一張數據表上可以建立多個索引,那麼每個索引就對應一個B樹的數據結構
2. 索引樹上是會存儲key值的,也就是定義索引指定的列的值
3. 存儲引擎使用索引來查詢時從根節點開始進行查找,索引樹是排序樹,通過比較節點值和需要查找的值層層往下查找
4. 葉子節點指針指向被所以的數據,而不是其他的節點頁
5. B樹是排序樹,非常適合查找一定範圍內的值

另外,在索引多個值的時候,排序依據是創建索引時指定列的順序進行排序。通過這些可見B樹適合於全鍵值,鍵值範圍或者鍵值前綴查找,以及order by 排序
通過B樹的原理,也可以理解索引的限制:
1. 必須從最左的列開始查找,應爲排序順序爲從左到右
2. 不能跳過中間的列
3. 如果查詢中某個列使用了模糊查詢,那麼右邊所有列都無法使用索引優化查找

什麼樣的索引纔是好索引呢,分3個層次
1. 一星索引:索引將相關記錄放在了一起。
2. 二星索引:索引中的順序和查找的order by 順序一致。
3. 三星索引:索引中包含查詢需要的全部列。

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