mysql 索引底層

【面試現場】爲何MySQL數據庫要用B+樹存儲索引?html

hash索引o(1)   B+樹索引 o(logn)面試

爲何紅黑樹出現了,由於防止某些狀況下二叉排序樹退化爲鏈表——誕生了二叉排序平衡樹——樹的性能取決於樹的高度數據庫

爲何DB要用M路B樹,爲了再下降樹的高度,減小db 磁盤io 次數,若是在內存中,紅黑樹效率更高數組

爲何M不能無限大,由於會退化成有序數組,沒法一次載入內存,B樹則能夠一次加載一個節點性能

B+樹在B樹的基礎上,(1)僅在葉子節點存放數據——B樹高度更大;(2)同時葉子節點鏈表——避免跨層範圍查找spa

爲何不用hash索引:設計

(1)select範圍3d

  (2) 不能排序指針

(3)索引通常是在磁盤上,數據量大的狀況可能沒法一次裝入內存,分批的話比B+樹io次數多的多,B+樹的設計能夠容許數據分批加載,同時樹的高度較低,磁盤io次數少,提升查找效率orm

  (4)hash衝突退化爲遍歷

 

 

還有一篇文章,

面試官:爲何MySQL的索引要使用B+樹,而不是其它樹?好比B樹?

 

https://www.cnblogs.com/sujing/p/11110292.html

一、B-Tree由於非葉子結點也保存具體數據,因此在查找某個關鍵字的時候找到便可返回。而B+Tree全部的數據都在葉子結點,每次查找都獲得葉子結點。因此在一樣高度的B-Tree和B+Tree中,B-Tree查找某個關鍵字的效率更高
  二、因爲B+Tree全部的數據都在葉子結點,而且結點之間有指針鏈接,在找大於某個關鍵字或者小於某個關鍵字的數據的時候,B+Tree只須要找到該關鍵字而後沿着鏈表遍歷就能夠了,而B-Tree還須要遍歷該關鍵字結點的根結點去搜索
  三、因爲B-Tree的每一個結點(這裏的結點能夠理解爲一個數據頁)都存儲主鍵+實際數據,而B+Tree非葉子結點只存儲關鍵字信息,而每一個頁的大小有限是有限的,因此同一頁能存儲的B-Tree的數據會比B+Tree存儲的更少。這樣一樣總量的數據,B-Tree的深度會更大,增大查詢時的磁盤I/O次數,進而影響查詢效率(針對聚簇索引主鍵索引)

相關文章
相關標籤/搜索