1. 程式人生 > >MySQL之索引詳解

MySQL之索引詳解

分布 i/o .cn 能夠 b+ images 電路 普通 磁道

這篇博客將要闡述為什麽使用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之索引詳解