MySQL之索引詳解
這篇博客將要闡述為什麽使用b+樹作為索引,而不是b樹或者其他樹
1.什麽是b樹
(圖片來自網絡)
b樹相關特性:⑴關鍵字分布在整棵樹中
⑵任何一個關鍵字只出現在一個節點上
⑶搜索可能在非葉子節點上結束
⑷搜索性能等價於在關鍵字全集內做二分查找
2.什麽是b+樹
(圖片來自網絡)
b+樹相關特性:⑴非葉子節點的子樹指針與關鍵字個數相同
⑵b+樹只有在到達葉子節點才會命中,其性能也等價於在關鍵字全集做二分查找
⑶所有關鍵字都出現在葉子節點的鏈表中,且鏈表中關鍵字恰好有序
⑷不可能在非葉子節點命中
⑸非葉子節點相當於葉子節點的索引,葉子節點相當於數據層
3.為什麽使用b/b+樹
背景:索引很大,一般都不存放於內存中,而是以文件的形式存放在磁盤中,所以索引的優劣主要看磁盤I/O的存取次數
(磁盤圖來自網絡)
⑴讀取原理:
①磁盤讀取時,系統會根據數據邏輯地址傳給磁盤,磁盤控制電路會解析出物理地址,即分析出哪個磁道哪個扇區
②為了減小I/O操作,磁盤讀取每次都會預讀,大小通常為頁的整數倍(4k),即使每次是需要讀取一個字節,磁盤也會讀取一頁的數據(4k)放入內存。
(在設計的時,數據庫設計者將樹的一個節點設計成一頁的數據)
⑵為什麽使用b+樹而非b樹:
①對b樹而言,如果一次簡述需要訪問4個節點,數據庫設計者把節點大小設計成一頁,讀取一個節點需要一個I/O操作,那麽最多需要3次I/O操作(根節點常存於內存)。綜上所述,我們可以得到結論,b-樹相對普通樹而言,其節點的關鍵字多,所以其樹高也就越低,存取時I/O次數也就越少。
②對b+樹而言,b+樹優於b樹的點就在於其非葉子節點只能存儲key,而不存儲關鍵字,這就大大減小了非葉子節點的,每個節點也就能夠存放更多記錄(其對應的索引),樹也就更矮,I/O操作也就越少。
MySQL之索引詳解