一个工作8年的粉丝私信了我一个问题. 他说这个问题是去阿里面试的时候被问到的,自己查了很多资料也没搞明白,希望我帮他解答. 问题是: "Mysql为什么使用B+Tree作为索引结构" 关于这个问题,看看普通人和高手的回答. 普通人: B+数它的特征就是相对B数来说他的这个非叶子节点不存数据,所有的数据都存在叶子节点 相对于B数来说他的查询次数IO次数会更稳. 高手: 关于这个问题 ,我从几个方面来回答. 首先,常规的数据库存储引擎,一般都是采用B树或者B+树来实现索引的存储. 因为B树…
MySQL InnoDB存储的文件结构 索引树是如何维护的? 数据库自增主键可能的问题…
福哥答案2020-05-18:此答案来自群员:因为4.0成型那个年代,B树体系大量用于文件存储系统,甚至当年的Longhorn的winFS都是基于b树做索引,开源而且好用的也就这么个体系了.B+树的磁盘读写代价更低,便于遍历,查询效率更加稳定,更适合基于范围的查询.数据来了先用索引节点找叶子,叶子找不到就新建叶子加索引书,这样减少io重复劳动. B树为平衡二叉树一种 分为B+树和B—树其中B+树在树内节点不存储数据只存key B-树将key和value一同存储在各子节点这样保证了树的每个节点只有…
面试发现经常有些重复的面试问题,自己也应该学会记录下来,最好自己能做成笔记,在下一次面的时候说得有条不紊,深入具体,面试官想必也很开心.以下是我个人总结,请参考: HashSet底层原理:(问了大几率跟HashMap一起面) HashMap底层原理:(非常大几率问到) Hashtable底层原理:(问的少,问了大几率问你跟HashMap的区别) synchronized底层如何实现?锁优化,怎么优化? ReentrantLock 底层实现: ConcurrentHashMap 的工作原理,底层原…
最近面试了不少家公司,从一家非外包跳到了外包(委屈脸Ծ‸Ծ),下面总结一下最近的一些心得体会 1.如果在做技术只是为了过日子,而没多大兴趣,那你必须需要考虑一下行业发展方向了.选定一个行业,深入某个行业发展,熟悉业务+技术,你会得到更多.懂业务的技术人,往往比技术大牛,牛逼(所以我选了这家银行外包) 2.面试中问了挺过关于运维的东西的,比如redis的集群策略,mq的集群策略等等,如果你公司中有运维,不需要你做搭建部署的工作,那你也得关注和学习公司所有运用的相关技术,多向运维学习 3.很多面试官…
理解mysql为何选择升级版的二叉树,就需要对各种常用的二叉树进行对比.B+Tree是一种特殊的二叉树,本质上也算二叉树.自然会满足二叉树的一般特性. 比如,比节点数据大的在右边,节点数据小的在左边. 二叉树(Binary Tree):每个结点最多有两个子树的树结构.一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树. AVL树(平衡二叉树):它是一种排序的二叉树.主要特征:左右子树的树高差绝对值不能超过1. R-B Tree(Red/Black Tree)红黑树,本质上也是一种二叉树.…
回顾前文: 一文学会MySQL的explain工具 (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本) MySQL官方文档中(https://dev.mysql.com/doc/refman/5.7/en/optimization-indexes.html)有这样一段描述: The best way to improve the performance of SELECT operations is to create indexes on one…
一.MySQL索引原理 1.索引背景 生活中随处可见索引的例子,如火车站的车次表.图书的目录等.它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据. 数据库也是一样,但显然要复杂许多,因为不仅面临着等值查询,还有范围查询(>.<.between.in).模糊查询(like).并集查询(or)等等.数据库应该选择怎么样的方式来应对所有的问题呢?我们回想字典的例子,能不能把数据分成段,然后分段查询…
B+树在数据库中的应用 { 为什么使用B+树?言简意赅,就是因为: 1.文件很大,不可能全部存储在内存中,故要存储到磁盘上 2.索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/+Tree,还跟磁盘存取原理有关.) 3.局部性原理与磁盘预读,预读的长度一般为页(page)的整倍数,(在许多操作系统中,页得大小通常为4k) 4.数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入,(由于节点中有两个数组,所以地址连续).…
MySQL存储引擎MyISAM和InnoDB底层索引结构 深入理解MySQL索引底层数据结构与算法 (各种索引结构优缺点) Myisam和Innodb索引实现的不同(存储结构) 存储引擎作用于什么对象 存储引擎是作用在表上的,而不是数据库. MyISAM和InnoDB对索引和数据的存储在磁盘上是如何体现的 先来看下面创建的两张表信息,role表使用的存储引擎是MyISAM,而user使用的是InnoDB: 再来看下两张表在磁盘中的索引文件和数据文件: 1. role表有三个文件,对应如下: ro…