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

2018 年 12 月 18 日 算法与数据结构

来自:互联网侦察



小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司。


话说两个多月前,小史通过了A厂的一面,两个多月后的今天,小史终于等到了A厂的二面。


简单的自我介绍后,面试官看了看小史的简历,开始发问了。



【面试现场】


小史:没问题,这个项目前端用的react+webpack,后端用的nginx+SpringBoot+Redis+MySql,前后端分离的,最后用docker进行容器化部署。主要模块有师生系统、课程系统、成绩系统、选课系统等。


这个项目的架构和说辞,小史早已背得溜溜的。


小史:底层mysql是存储,redis是缓存,dao层操作mysqlcache层操作redisservice层处理业务逻辑,rest api层为前端提供rest接口。前端这边用react进行模块化,webpack打包部署。网关nginx进行负载均衡。mysqlredisnginxspringboot应用都放在docker里部署。


题目:为什么MySQL数据库要用B+树存储索引?


小史听到这个题目,陷入了回忆。


【前段时间的饭局】


话说吕老师给小史讲完人工智能的一些知识后,他们一起回家吃小史姐姐做的饭去了。



【饭后】


吕老师:面试的时候一定是往深了问,不精通的话容易吃亏。不过面试时一般都是根据项目来问,项目中用到的技术,一定要多看看原理,特别是能和数据结构和算法挂钩的那部分。

小史:树的话,无非就是前中后序遍历、二叉树、二叉搜索树、平衡二叉树,更高级一点的有红黑树、B树、B+树,还有之前你教我的字典树。


【红黑树】


一听到红黑树,小史头都大了,开始抱怨了起来。


小史:红黑树看过很多遍了,但是每次都记不住,它的规则实在是太多了,光定义就有四五条规则,还有插入删除的时候,需要调整树,复杂得很。

吕老师:小史,问你红黑树,并不是让你背诵它的定义,或者让你手写一个红黑树,而是想问问你它为什么这样设计,它的使用场景有哪些。


【B树】


吕老师:小史,你要知道,文件系统和数据库的索引都是存在硬盘上的,并且如果数据量大的话,不一定能一次性加载到内存中。

两个月前,小史面试没考虑内存情况差点挂了,传送门


【B+树】


吕老师:这也是和业务场景相关的,你想想,数据库中select数据,不一定只选一条,很多时候会选多条,比如按照id排序后选10条。

小史:我明白了,如果是多条的话,B树需要做局部的中序遍历,可能要跨层访问。而B+树由于所有数据都在叶子结点,不用跨层,同时由于有链表结构,只需要找到首尾,通过链表就能把所有数据取出来了。


【回到现场】


小史:这和业务场景有关。如果只选一个数据,那确实是hash更快。但是数据库中经常会选择多条,这时候由于B+树索引有序,并且又有链表相连,它的查询效率比hash就快很多了。

小史:而且数据库中的索引一般是在磁盘上,数据量大的情况可能无法一次装入内存,B+树的设计可以允许数据分批加载,同时树的高度较低,提高查找效率。

HR和小史简单地聊了聊基本情况,这次面试就结束了。


小史走后,面试官在系统中写下了面试评语:


几天后,小史收到了A厂的offer



●编号814,输入编号直达本文

●输入m获取文章目录

推荐↓↓↓

人工智能与大数据技术

更多推荐25个技术类公众微信

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

登录查看更多
0

相关内容

一个开源的关系型数据库,开发者为瑞典 MySQL AB 公司。在2008年1月16号被 Sun 公司收购。而2009年,SUN 又被 Oracle 收购.目前 MySQL 被很多互联网企业所使用。有体积小、速度快、总体拥有成本低,开放源码等优点
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
67+阅读 · 2020年3月9日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
滴滴离线索引快速构建FastIndex架构实践
InfoQ
21+阅读 · 2020年3月19日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
数据库之架构:主备+分库?主从+读写分离?
架构文摘
8+阅读 · 2019年4月23日
亿级订单数据的访问与储存,怎么实现与优化
ImportNew
11+阅读 · 2019年4月22日
如何做数据治理?
智能交通技术
18+阅读 · 2019年4月20日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
基于 Storm 的实时数据处理方案
开源中国
4+阅读 · 2018年3月15日
Spark的误解-不仅Spark是内存计算,Hadoop也是内存计算
A survey on deep hashing for image retrieval
Arxiv
14+阅读 · 2020年6月10日
Arxiv
3+阅读 · 2019年3月1日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
6+阅读 · 2018年5月22日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
6+阅读 · 2018年1月14日
VIP会员
相关资讯
滴滴离线索引快速构建FastIndex架构实践
InfoQ
21+阅读 · 2020年3月19日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
数据库之架构:主备+分库?主从+读写分离?
架构文摘
8+阅读 · 2019年4月23日
亿级订单数据的访问与储存,怎么实现与优化
ImportNew
11+阅读 · 2019年4月22日
如何做数据治理?
智能交通技术
18+阅读 · 2019年4月20日
亿级订单数据的访问与存储,怎么实现与优化?
码农翻身
16+阅读 · 2019年4月17日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
基于 Storm 的实时数据处理方案
开源中国
4+阅读 · 2018年3月15日
Spark的误解-不仅Spark是内存计算,Hadoop也是内存计算
相关论文
A survey on deep hashing for image retrieval
Arxiv
14+阅读 · 2020年6月10日
Arxiv
3+阅读 · 2019年3月1日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
6+阅读 · 2018年5月22日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
6+阅读 · 2018年1月14日
Top
微信扫码咨询专知VIP会员