从数据库优化追问到B+树,头痛还被虐!

java团长

共 1943字,需浏览 4分钟

 · 2020-07-28

昨天和前同事下班约好一起去吃火锅,期间听到他皱眉毛叹气,“前段时间去面试,被面试官连环追问从MYSQL数据库优化一路追问到B+树索引底层。当场崩溃啊,想想就头痛。”

于是我笑了笑,“MYSQL B+索引,每天都在用却不知道原理。面试官估计心里在犯嘀咕,其它方面都可以,但是就怕你来了之后,数据库变慢了。这样我帮你具体分析分析。”

面试题是这样的:

Q:InnoDB使用的B+ 树的索引模型,你知道为什么采用B+树吗?这和Hash索引比较起来有什么优缺点吗?

A:(突然觉得这道题有点难)因为Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,所以多个数据在存储关系上是完全没有任何顺序关系的,对于区间查询是无法直接通过索引查询的,就需要全表扫描。哈希索引只适用于等值查询的场景,而B+树是一种多路平衡查询树,它的节点是天然有序的,所以对于范围查询的时候不需要做全表扫描。

Q:在创建联合索引的时候,需要做联合索引多个字段之间顺序是如何选择的呢?

A:我们把识别度最高的字段放到最前面

Q:为什么这么做呢?

A:(这个问题有点把我问蒙了)这样的话可能命中率会高一点吧...

Q:你知道最左前缀匹配吗?

A:(我突然想起来原来面试官是想问这个)在创建多列索引时,我们根据业务需求,where子句中使用最频繁的一列放在最左边,因为MySQL索引查询会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。所以当我们创建一个联合索引的时候,如(key1,key2,key3),相当于创建了(key1)、(key1,key2)和(key1,key2,key3)三个索引,这就是最左匹配原则)

Q:那什么情况下会发生明明创建了索引,但是执行的时候并没有通过索引呢?

A:(大概记得和优化器有关,但是这个问题并没有回答好

“最后感觉是因为自己回答的不够好,所以被追问得很多,虐的很惨。”朋友这样说。

作为一名后端程序员,需要经常与MYSQL打交道,不过更多的时候可能还是停留在增删改查的应用层面。然而随着负责项目的数据量增长和服务器硬件性能出现瓶颈,通过理解MYSQL的工作原理,在遇到问题的时候,就能更快地摸清问题的本质;知道索引的实现原理,就能从原理的角度推断可能的解决方案。

所以,这里给大家推荐一个Java进阶训练营。除了会精讲MYSQL索引实现原理以外,Spring、Springboot、JVM都会涉及到。训练营为期4天,每晚20:00,进群即可0元领取听课名额。


训练营具体内容:


训练营详细技术课程大纲:

DAY1:面试互联网大厂Spring面试题详解

1. Spring中Bean的生命周期有哪些步骤?

2. 什么是BeanDefinition?它为什么非常重要?

3. 什么是Bean的后置处理器?

4. 什么是Bean工厂的后置处理器?

5. 什么是BeanFactory?它与ApplicationContext的区别?

6. 什么是FactoryBean?它与BeanFactory的区别?

7. @Import、@Component、@Bean的区别是什么?

8. 什么是ImportBeanDefinitionRegistrar?它的作用是什么?


DAY2:面试必备JVM调优实战

1、补下进制知识

2、你知道怎么计算对象大小吗?

3、深入讲解指针压缩

4、虚拟机栈溢出与调优


DAY3:深入理解Springboot底层原理

1. springboot零配置的原理
2. springboot如何做到内嵌tomcat
3. springboot启动流程原理
4. 常见面试考点SPI规范讲解


DAY4:深入Mysql索引实现原理

1. B+树的定义
2. InnoDB中的“页”
3. InnoDB中主键索引生成过程
4. InnoDB中联合索引生成过程
5. 索引实战与优化


训练营技能斩获:

学会Java核心技术,构建完整知识体系;

深入Java底层源码,培养阅读源码能力

提升底层开发能力,把握框架运行流程;


课程中将会提供的服务

1、技术答疑

直播期间,通过与讲师进行技术问题的切磋,讲师将会对相关问题进行解答。

2、助教督学

助教全程式陪伴学习,提醒到课、发送技术资料、整理学员学习需求。

3、技术资料辅助

在课程进行的同时,我们也准备了相应的技术脑图和知识点大全,方便进行系统学习。

本次课程全程不收取任何费用,长按识别扫码进群,和更多的小伙伴一起完成技术系统性进阶。

浏览 33
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报