图文 红黑树,B树,B+树 本质区别及应用场景

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

图文 红黑树,B树,B+树 本质区别及应用场景_第1张图片

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

 

图文 红黑树,B树,B+树 本质区别及应用场景_第2张图片

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

面试现场

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

 

图文 红黑树,B树,B+树 本质区别及应用场景_第3张图片

小史:没问题,这个项目前端用的 React+Webpack,后端用的 Nginx+Spring Boot+Redis+MySQL,前后端是分离的,最后用 Docker 进行容器化部署。主要模块有师生系统、课程系统、成绩系统、选课系统等。

图文 红黑树,B树,B+树 本质区别及应用场景_第4张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第5张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第6张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第7张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第8张图片

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

图文 红黑树,B树,B+树 本质区别及应用场景_第9张图片

小史:底层 MySQL 是存储,Redis 是缓存,Dao 层操作 MySQL,Cache层操作 Redis,Service 层处理业务逻辑,Rest API 层为前端提供 Rest 接口。

前端这边用 React 进行模块化,Webpack 打包部署。网关 Nginx 进行负载均衡。MySQL、Redis、Nginx 和 Spring Boot 应用都放在 Docker 里部署。

 

图文 红黑树,B树,B+树 本质区别及应用场景_第10张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第11张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第12张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第13张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第14张图片

 

 

图文 红黑树,B树,B+树 本质区别及应用场景_第15张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第16张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第17张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第18张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第19张图片

 

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

 

图文 红黑树,B树,B+树 本质区别及应用场景_第20张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第21张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第22张图片

 

题目:为什么 MySQL 数据库要用 B+ 树存储索引?小史听到这个题目,陷入了回忆。

 

图文 红黑树,B树,B+树 本质区别及应用场景_第23张图片

 

前段时间的饭局

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

图文 红黑树,B树,B+树 本质区别及应用场景_第24张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第25张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第26张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第27张图片

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

图文 红黑树,B树,B+树 本质区别及应用场景_第28张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第29张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第30张图片

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

红黑树

 

图文 红黑树,B树,B+树 本质区别及应用场景_第31张图片

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

 

图文 红黑树,B树,B+树 本质区别及应用场景_第32张图片

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

图文 红黑树,B树,B+树 本质区别及应用场景_第33张图片

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

图文 红黑树,B树,B+树 本质区别及应用场景_第34张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第35张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第36张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第37张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第38张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第39张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第40张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第41张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第42张图片

 

 

图文 红黑树,B树,B+树 本质区别及应用场景_第43张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第44张图片

 

 

图文 红黑树,B树,B+树 本质区别及应用场景_第45张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第46张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第47张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第48张图片

B 树

图文 红黑树,B树,B+树 本质区别及应用场景_第49张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第50张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第51张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第52张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第53张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第54张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第55张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第56张图片

 

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

 

图文 红黑树,B树,B+树 本质区别及应用场景_第57张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第58张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第59张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第60张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第61张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第62张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第63张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第64张图片

 

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

 

图文 红黑树,B树,B+树 本质区别及应用场景_第65张图片

 

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

图文 红黑树,B树,B+树 本质区别及应用场景_第66张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第67张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第68张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第69张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第70张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第71张图片

B+ 树

图文 红黑树,B树,B+树 本质区别及应用场景_第72张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第73张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第74张图片

 

 

图文 红黑树,B树,B+树 本质区别及应用场景_第75张图片

 

 

图文 红黑树,B树,B+树 本质区别及应用场景_第76张图片

 

 

图文 红黑树,B树,B+树 本质区别及应用场景_第77张图片

 

 

图文 红黑树,B树,B+树 本质区别及应用场景_第78张图片

 

 

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

 

图文 红黑树,B树,B+树 本质区别及应用场景_第79张图片

 

 

小史:我明白了,如果是多条的话,B 树需要做局部的中序遍历,可能要跨层访问。

而 B+ 树由于所有数据都在叶子结点,不用跨层,同时由于有链表结构,只需要找到首尾,通过链表就能把所有数据取出来了。

 

图文 红黑树,B树,B+树 本质区别及应用场景_第80张图片

 

 

图文 红黑树,B树,B+树 本质区别及应用场景_第81张图片

 

 

回到现场

 

图文 红黑树,B树,B+树 本质区别及应用场景_第82张图片

 

 

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

 

 

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

 

图文 红黑树,B树,B+树 本质区别及应用场景_第83张图片

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

 

图文 红黑树,B树,B+树 本质区别及应用场景_第84张图片

 

 

HR 和小史简单地聊了聊基本情况,这次面试就结束了。小史走后,面试官在系统中写下了面试评语:

 

图文 红黑树,B树,B+树 本质区别及应用场景_第85张图片

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

图文 红黑树,B树,B+树 本质区别及应用场景_第86张图片

 

图文 红黑树,B树,B+树 本质区别及应用场景_第87张图片

你可能感兴趣的:(数据库)