B树,B+树,红⿊树数据库常见⾯试题
B树,B+树,红⿊树 数据库常见⾯试题
2018年10⽉11⽇ 15:47:19 阅读数:520
Q0.数据库索引有哪些,优缺点?
hash索引和B+树索引
hash索引等值查询效率⾼,但是不能排序,因此不能进⾏范围查询
B+树索引数据有序,能够进⾏范围查询
Q1.为什么不⽤⼆叉查树作为数据库索引?redis集配置文件详解
⼆叉查树,查到指定数据,效率其实很⾼logn。但是数据库索引⽂件有可能很⼤,关系型数据存储了上亿条数据,索引⽂件⼤则上G,不可能全部放⼊内存中,
⽽是需要的时候换⼊内存,⽅式是磁盘页。⼀般来说树的⼀个节点就是⼀个磁盘页。如果使⽤⼆叉查树,那么每个节点存储⼀个元素,查到指定元素,需要进⾏⼤量的磁盘IO,效率很低。
execsqlselectinto
⽽B树解决了这个问题,通过单⼀节点包含多个data,⼤⼤降低了树的⾼度,⼤⼤减少了磁盘IO次数。generic host process for win32
Q2.B树和⼆叉查树的性能对⽐?
B树包括B+树的设计思想都是尽可能的降低树的⾼度,以此降低磁盘IO的次数,因为⼀个索引节点就表⽰⼀个磁盘页,页的换⼊换出次数越多,表⽰磁盘IO次数越多,越低效。
B树算法减少定位数据所在的节点时所经历的磁盘IO次数,从⽽加快。
字符数组与字符串是否相同假设⼀个节点可以容纳100个值,那么3层的B树可以容纳100万个数据。(根节点100值,第⼆层可以存储99个节点(k-1),也就是
99*100 个值,第三层可以存储
(99*100-1)*100)结果是近似100万个数据。⽽如果使⽤⼆叉查树,则需要将近20层,也就是进⾏20次磁盘IO,性能差距如此之⼤。
如mongoDB数据库使⽤,单次查询平均快于Mysql(但侧⾯来看Mysql⾄少平均查询耗时差不多)。
Q3.B+对⽐B树的优点?
因为B树的每个节点除了存储指向⼦节点的索引之外,还有data域,因此单⼀节点存储的指向⼦节点的索引并不是很多,树⾼度较⾼,磁盘IO次数较多,output是什么意思功放
⽽B+树单⼀节点存储的指向⼦节点的索引更多,B+树空间利⽤率⾼,因此B+树⾼度更低,磁盘IO次数更少,性能更好。
因为B树的中间节点存储了数据,所以整个树的每⼀层都有可能查到要查的数据,查询性能不稳定,
⽽B+树所有的data都存储在叶⼦节点,且叶⼦节点位于同⼀层,因此查询性能稳定。
B树如果想要进⾏范围查,需要频繁的进⾏⼆叉树的中序遍历,进⾏范围查⽐较复杂,
B+树要查的元素都位于叶⼦节点,且连接形成有序链表,便于范围查。
Q4.B树,B+树使⽤场景。
B树主要⽤于⽂件系统,和部分数据库索引,如⽂档型数据库mongodb
B+树主要⽤于mysql数据库索引。mysql面试题acid
Q5.为什么数据库索引不⽤红⿊树⽽⽤B+树?
红⿊树当插⼊删除元素的时候会进⾏频繁的变⾊与旋转(左旋,右旋),来保证红⿊树的性质,浪费时间。但是当数据量较⼩,数据完全可以放⼊内存中,不需要进⾏磁盘IO,这时候,红⿊树时间复杂度⽐B+树低。⽐如TreeSet TreeMap 和HashMap (jdk1.8)就是使⽤红⿊树作为底层数据结构。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。