作者 |  channingbreeze
责编 | 郭芮

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

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

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

面试现场

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

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

小史:底层MySQL是存储,Redis是缓存,DAO层操作MySQL,Cache层操作Redis,Service层处理业务逻辑,Rest API层为前端提供Rest接口。前端这边用React进行模块化,Webpack打包部署。网关Nginx进行负载均衡。MySQL、Redis、Nginx和SpringBoot应用都放在Docker里部署。

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

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

前段时间的饭局

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

【饭后】

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

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

【红黑树】

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

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

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

【B树】

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

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

【B+树】

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

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

回到现场

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

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

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

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

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

亲爱的读者们,面试现场的第一季到这里就全部结束了,感谢大家的支持,我们一起期待小史后面的故事。

关于小史的面试故事,可点击回顾呦:

  • 起底 BAT 最喜欢什么样的程序员?

  • 英语不好的程序员,如何斩获外企 offer?

  • 非计算机专业如何靠自学杀进 BAT ?

  • 如何用编程 get 百万年终奖?

  • 如何找到字符串中的最长回文子串?

  • BAT 面试中,遇到知识盲点如何巧妙圆场?

  • 如何在 10 亿数中找出前 1000 大的数?

  • 漫画:如何用字典树进行 500 万量级的单词统计?

  • 如何设计可自学习的五子棋 AI?

  • 算到怀疑人生!如何用并查集解决朋友圈个数问题?

作者:channingbreeze,国内某互联网公司全栈开发。

声明:本文为作者投稿,版权归对方所有。

【完】


 热 文 推 荐 

☞IT 奇侠传

☞ 30 岁后,哪些职业瓶颈阻碍了你的成长?

☞ 漫画:什么是字符集和编码?ASCII、UTF-8、UTF-16、UTF-32 又是什么?

从倾家荡产到身价百亿,这个85后只用了8年

☞ 难逃寒冬裁员的“大追杀”,30 岁女码农该何去何从?

☞ OpenStack 2018 年终盘点

拼多多黄峥给陆奇“兼职”,欲挖掘这类AI人才

☞ 老程序员肺腑忠告:千万别一辈子靠技术生存!

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

点击“阅读原文”,打开 CSDN App 阅读更贴心!

喜欢就点击“好看”吧

漫画 | 为什么 MySQL 数据库要用 B+ 树存储索引?相关推荐

  1. mysql存储base64位用什么类型_【漫画】面试现场:为什么MySQL数据库要用B+树存储索引?...

    推荐阅读:MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒! 小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 话说 ...

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

    小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 话说两个多月前,小史通过了A厂的一面,两个多月后的今天,小史终于等到了A厂的二面. 简单 ...

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

    A:为什么MySQL数据库要用B+树存储索引? Hash的查找速度为O(1),而树的查找速度为O(log2n),为什么不用Hash作为数据库的存储索引呢? 树的话,无非就是前中后序遍历.二叉树.二叉搜 ...

  4. mysql数据库in函数查询是否走索引

    mysql数据库in函数查询是否走索引? IN 通常是走索引的,当IN后面的数据在数据表中超过30%的匹配时是全表的扫描,不会走索引,因此IN走不走索引与后面的数据量有关系! 昨天恰好在工作中遇到了这 ...

  5. Mysql数据库查询好慢,除了索引,还能因为什么?

    mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题. 遇到这种问题,我们一般也会想到是因为索引. 那除开索引之外,还有哪些因素会导致数据库查询变慢呢? 有哪些操作,可 ...

  6. ruhr启动mysql数据库_Mysql表类型(存储引擎)的选择

    以下内容转载自:https://www.cnblogs.com/jswang/p/6923911.html 7.1 mysql存储引擎概述 插件式存储引擎是mysql数据库最重要的特性之一,用户可以根 ...

  7. mysql数据库sql优化看这里之索引优化

    前面我们讲了如何创建索引以及哪些情况下该创建索引.现在我们来说一下sql优化中的索引如何优化. 首先我们需要了解都有哪些纬度可以进行数据库调优: ①索引失效,没有充分利用到索引--索引建立 ②关联查询 ...

  8. java代码内创建mysql索引_点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)...

    下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映 ...

  9. Python封装函数实现MySQL数据库增删改和数据存储

    目录 一.背景介绍 二.封装数据库访问函数 (1)封装数据库连接函数dbconnect (2)封装SQL查询函数SQLQuery (3)封装SQL命令函数SQLCommand 三.主函数调用 1.定义 ...

最新文章

  1. [转] asp.net core Introducing View Components
  2. VC++ .NET 2003学习
  3. [云炬创业学笔记]第一章创业是什么测试13
  4. C#语法:委托与事件
  5. GIS实战应用案例100篇(二)-元胞自动机模拟城市扩张过程
  6. 域 嵌入图像显示不出来_如何(以及为什么)将域概念嵌入代码中
  7. Hibernate获取数据方式与缓存使用
  8. 【题解】(排序) —— POJ 0803:DNA排序
  9. java使用哪个类,怎么知道 java类从哪个jar 加载
  10. spring mvc 接收表单 bean
  11. Linux 命令 之 【chmod】 修改文件权限~
  12. ac自动机 匹配最长前缀_【HDU】5069 Harry And Biological Teacher AC自动机fail指针建树dfs...
  13. 解决windows 2003 无法安装vss2005的问题
  14. c语言erp系统开发,erp系统怎么开发工具
  15. 手电筒安卓_王思聪吃热狗数字时钟安卓apk下载安装ios现在
  16. Spark大数据-TMDB电影数据分析(spark-scala版)
  17. Shiro框架基本知识及应用
  18. 从程序员到合格的软件设计师
  19. 简单易上手的微信电子名片的制作方法!
  20. mysql和sqline的异同_mysql的那点事儿,你知道吗

热门文章

  1. mysql join 原理 简书_mysql-join
  2. linux定时任务_linux定时任务cron HelloWorld
  3. Python re 模块深入探索
  4. 中国树桩粉碎机市场趋势报告、技术动态创新及市场预测
  5. 数字视频内容行业调研报告 - 市场现状分析与发展前景预测
  6. mysql foundrows 并发_MySQL 中的 FOUND_ROWS() 函数
  7. Serverless 是一种思想状态
  8. 必看!程序员逃生指南!
  9. 博客之星年度总评选:巅峰之战,谁与争锋?
  10. GitHub 下架 Youtube-dl 遭粉丝疯狂上传源码报复,开源者的权益谁来维护?