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次数,进而影响查询效率(针对聚簇索引主键索引)

相关文章
相关标签/搜索