从数据库优化追问到B+树,头痛还被虐!
昨天和前同事下班约好一起去吃火锅,期间听到他皱眉毛叹气,“前段时间去面试,被面试官连环追问,从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、虚拟机栈溢出与调优
1. springboot零配置的原理
2. springboot如何做到内嵌tomcat
3. springboot启动流程原理
4. 常见面试考点SPI规范讲解
DAY4:深入Mysql索引实现原理
训练营技能斩获:
学会Java核心技术,构建完整知识体系;
深入Java底层源码,培养阅读源码能力;
提升底层开发能力,把握框架运行流程;
课程中将会提供的服务
1、技术答疑
直播期间,通过与讲师进行技术问题的切磋,讲师将会对相关问题进行解答。
2、助教督学
助教全程式陪伴学习,提醒到课、发送技术资料、整理学员学习需求。
3、技术资料辅助
在课程进行的同时,我们也准备了相应的技术脑图和知识点大全,方便进行系统学习。
本次课程全程不收取任何费用,长按识别扫码进群,和更多的小伙伴一起完成技术系统性进阶。