1. 程式人生 > >mysql B-tree索引原理

mysql B-tree索引原理

B-tree索引的值都是按照順序儲存的,並且每一個葉子頁根的距離相同。
下圖展示了B-tree原理
這裡寫圖片描述
- B-tree索引能夠加快訪問資料的速度,因為儲存引擎不再需要進行全表掃描來獲取需要的資料,取而代之的是從索引的根節點,開始進行搜素。根節點存放了指向子節點的指標,儲存引擎根據這些指標向下查詢。通過比較節點頁的值和要查詢的值可以找到合適的指標進入下層子節點,這些指標實際上定義了子節點頁中的值得上限和下限。最終儲存引擎要麼是找到對應的值要麼記錄不存在

  • 葉子節點指向的是被索引的資料,而不是其他的節點頁,根節點和葉子節點之間可能有很多層節點頁。樹的深度和表的大小直接相關

  • B-tree對所以列時順序組織儲存的,所以很適合查詢範圍資料

B-tree索引適用於全鍵值、鍵值範圍或鍵字首查詢(鍵字首只適用最左字首查詢)
- B-tree索引適用於全鍵值、鍵值範圍或鍵字首查詢(鍵字首只適用最左字首查詢)
- 全值匹配:全值匹配指的是和索引中的所有列進行匹配
- 匹配最左字首:從左向右依次匹配,不能跳過左邊的
- 匹配列字首:也可以匹配某一列的值得開頭部分
- 匹配範圍值:因為b-tree是順序儲存的所以適合範圍匹配
- 精確匹配某一列並範圍匹配另一列
B-tree索引的限制:
- 如果不是按照索引的最左列開始查詢,則無法使用索引
- 不能跳過索引中的列
- 如果查詢中有某個列的範圍查詢,則其右邊所有的列都無法使用索引優化查詢

摘自《高效能mysql》