Mysql InnoDB 為啥選擇B 樹索引 一

2021-09-09 00:18:14 字數 1013 閱讀 7188

mysql資料庫中的常見索引有多種方式,例如hash索引,b-樹索引,b+樹索引,但是為啥mysql中預設是採用b+樹索引索引呢?下面對這三種索引學習總結一下。b+樹到底有啥優勢?

b-樹有如下特點:

所有鍵值分布在整顆樹中;

任何乙個關鍵字出現且只出現在乙個結點中;

搜尋有可能在非葉子結點結束;

在關鍵字全集內做一次查詢,效能逼近二分查詢;

b+樹是為磁碟及其他儲存輔助裝置而設計一種平衡查詢樹(不是二叉樹)。b+樹中,所有記錄的節點按大小順序存放在同一層的葉節點中,各葉節點用指標進行連線。b+樹從根節點到葉子節點的搜尋效率基本相當,不會出現大幅波動。

簡化 b+樹 如下圖

b+樹有如下特點

每個節點不再只是儲存乙個key了,可以儲存多個key。

非葉子節點儲存key,葉子節點儲存key和資料。

葉子節點兩兩指標相互鏈結,順序查詢效能更高。葉子節點兩兩相連,符合磁碟的預讀特性。比如葉子節點儲存50和55,它有個指標指向了60和62這個葉子節點,那麼當我們從磁碟讀取50和55對應的資料的時候,由於磁碟的預讀特性,會順便把60和62對應的資料讀取出來。這個時候屬於順序讀取,而不是磁碟尋道了,加快了速度。

雜湊索引就是採用一定的雜湊演算法,把鍵值換算成新的雜湊值,檢索時不需要類似b+樹那樣從根節點到葉子節點逐級查詢,只需一次雜湊演算法即可立刻定位到相應的位置,速度非常快。

從上面的圖來看,b+樹索引和雜湊索引的明顯區別是:

上面大致介紹了b-樹,b+樹,雜湊索引。那麼b+樹的優勢大致總結如下

1.2.

3.4.

mysql索引為啥要選擇B 樹 下

首先要明白幾個概念,伺服器儲存一般分記憶體和硬碟,記憶體的大小相對於硬碟來說是很小的。記憶體的訪問速度是納秒級別的,非常快,而硬碟的訪問速度相對記憶體來說就比較慢了。不管是訪問記憶體還是硬碟資料,作業系統都是按資料頁來讀取資料的,即每訪問一次硬碟或記憶體,只讀取一頁大小的資料,一頁的大小約等於 4 ...

MySQL innoDB效能優化

起因 有乙個innodb引擎的表table,在乙個大概3000次的foreach迴圈中執行 insert into table columna,columnb values valuea,valueb 結果居然超出了60s的php執行限制 當然這個限制可以在php.ini中修改 讓我很不解為何插入效...

mysql innodb 效能優化

預設情況下,innodb的引數設定的非常小,在生產環境中遠遠不夠用 比如最重要的兩個引數 innodb buffer pool size 預設是8m innodb flush logs at trx commit 預設設定的是1 也就是同步重新整理log 可以這麼理解 innodb buffer p...