码迷,mamicode.com
首页 > 数据库 > 详细

mysql 索引底层

时间:2019-08-25 18:29:09      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:blog   其它   大于   mysql数据库   有序数组   平衡   红黑树   提高   情况   

【面试现场】为什么MySQL数据库要用B+树存储索引?

hash索引o(1)   B+树索引 o(logn)

为什么红黑树出现了,因为防止某些情况下二叉排序树退化为链表——诞生了二叉排序平衡树——树的性能取决于树的高度

为什么DB要用M路B树,为了再降低树的高度,减少db 磁盘io 次数,如果在内存中,红黑树效率更高

为什么M不能无限大,因为会退化成有序数组,无法一次载入内存,B树则可以一次加载一个节点

B+树在B树的基础上,(1)仅在叶子节点存放数据——B树高度更大;(2)同时叶子节点链表——避免跨层范围查找

为什么不用hash索引(1)select多条(2)索引一般是在磁盘上,数据量大的情况可能无法一次装入内存,B+树的设计可以允许数据分批加载,同时树的高度较低,磁盘io次数少,提高查找效率

 

技术图片

技术图片

 

还有一篇文章,

面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?

 

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

1、B-Tree因为非叶子结点也保存具体数据,所以在查找某个关键字的时候找到即可返回。而B+Tree所有的数据都在叶子结点,每次查找都得到叶子结点。所以在同样高度的B-Tree和B+Tree中,B-Tree查找某个关键字的效率更高
  2、由于B+Tree所有的数据都在叶子结点,并且结点之间有指针连接,在找大于某个关键字或者小于某个关键字的数据的时候,B+Tree只需要找到该关键字然后沿着链表遍历就可以了,而B-Tree还需要遍历该关键字结点的根结点去搜索
  3、由于B-Tree的每个结点(这里的结点可以理解为一个数据页)都存储主键+实际数据,而B+Tree非叶子结点只存储关键字信息,而每个页的大小有限是有限的,所以同一页能存储的B-Tree的数据会比B+Tree存储的更少。这样同样总量的数据,B-Tree的深度会更大,增大查询时的磁盘I/O次数,进而影响查询效率。

 

mysql 索引底层

标签:blog   其它   大于   mysql数据库   有序数组   平衡   红黑树   提高   情况   

原文地址:https://www.cnblogs.com/silyvin/p/11408519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!