索引是為了實現mysql高效能查詢的資料結構。
為了快速查詢資料,MySql在查詢演算法上進行了許多優化。但是就如二叉樹查詢演算法
只能應用於二叉樹
資料結構一樣,需要有滿足這種查詢演算法的資料結構,而資料本身的結構可能並不能滿足查詢演算法所需要的資料結構,所以MySql在資料之外維護了一個能應用於高效的查詢演算法的資料結構,這種資料結構,就是索引。
接下來將介紹使用最多的索引型別——B-Tree索引
B-Tree索引通常用的是B-Tree的變種B+Tree資料結構
B-Tree的節點是一個二元陣列[key,data]
,key是記錄的鍵,data是鍵對應的資料,每個節點的每個key左右各有一個指標,非葉子節點的指標分別指向下一層的節點,葉子節點的指標為null,如下圖:
要查詢值的時候,會先從根節點開始查詢,根節點的每個key有左右兩個指標,可以通過這兩個指標訪問下一層節點。每次查詢都會將查詢值與key值進行比較,根據比較結果找到合適的指標進入下一層節點,最終,如此重複,最終找到對應的值或者值不存在
B+Tree節點是B-Tree的變種,相對於B-Tree而言B+Tree有如下不同:
在每個非葉子節點只會儲存key而不會儲存data,data將統一儲存到葉子節點中,葉子節點頁不需儲存指標,但是增加了指向相鄰葉子節點的指標
如下圖
1.全鍵值查詢,如whre key=val
的查詢條件
2.鍵值範圍查詢,如where key>0
此型別的範圍查詢
3.鍵字首查詢(只適合於最左字首查詢),如where key like 'abc%'
有效,where key like '%abc'
或where key like '%abc%'
等方式都無效
1.只能按照最左列開始查詢,否則無法使用
2.不能跳過索引中的列,例如有key(a,b,c),不能直接跳過a列使用b列索引,所以在建立索引的時候,順序也很重要
3.如果查詢中有一個列使用了範圍查詢,則右邊所有列都不能使用索引
本作品採用《CC 協議》,轉載必須註明作者和本文連結