阿里二面:因MySQL优化引发的”血案“,我被血虐了!!

关于数据库领域,MySQL 已经深入人心,其开源,高可靠性,高效易于维护的特性,被广为程序员或科技公司青睐。然而Java 程序员不能只懂数据库的增删改查和一些简单的使用技巧,更需要熟练掌握 MySQL 的原理知识,从而更好地应对实际工作中遇到的问题。

楼主自认为对MySQL优化的索引相关知识有很多了解,同事们也都热情的称呼我为大佬。楼主一直想进阿里,特地花了1个月左右时间复习相关知识,自信MySQL掌握的很好了,所以斗胆在简历上写了“精通MySQL”,想不到被阿里面试官狠狠虐了一把…(关于这次面试题目和整理的答案我附在了文末,有需要的同学自行领取哈)

前半段和面试官相谈甚欢,聊着聊着我提到我们业务量比较大,每天大概有几百万的新数据生成。

面试官来了兴趣: 你们每天这么大的数据量,都是保存在关系型数据库中吗?
我: 是的,我们线上使用的是MySQL数据库。

面试官: 那你们有没有对于查询做一些优化呢?
我: 我们在数据库中创建了一些索引(我现在非常后悔我当时说了这句话)。

面试官: 你能说说为什么B+树相对于B树在查询上会更加优胜吗?
我:(这道题我背过答案!)B+树磁盘读写代价更低,;B+树查询效率更加稳定;对于范围查找来说,B+树只需遍历叶子节点链表即可,B树却需要重复地中序遍历…

面试官: 除了上面这个范围查询的,你还能说出其他的一些区别吗?
我:???

聚簇索引、覆盖索引

面试官: 刚刚我们聊到B+ Tree,那你知道B+Tree的叶子节点都可以存哪些东西吗?
面试官: 聚簇索引和非聚簇索引,在查询数据的时候有区别吗?
面试官: 刚刚你提到主键索引查询只会查一次,而非主键索引需要回表查询多次。是所有情况都是这样的吗?非主键索引一定会查询多次吗?

联合索引、最左前缀匹配

面试官: 你们在创建索引的时候都会考虑哪些因素呢?你们有用过联合索引吗?
面试官: 那你们在创建联合索引的时候,需要做联合索引多个字段之间顺序你们是如何选择的呢?

索引下推、查询优化

面试官: 你知道在MySQL 5.6中,对索引做了哪些优化吗?
面试官: 你们创建的那么多索引,到底有没有生效,或者说你们的SQL语句有没有使用索引查询你们有统计过吗?
我: 这个还没有统计过,除非遇到慢SQL的时候我们才会去排查;

面试官: 那排查的时候,有什么手段可以知道有没有走索引查询呢?
面试官: 那什么情况下会发生明明创建了索引,但是执行的时候并没有通过索引呢?
我:(依稀记得和优化器有关,但是这个问题并没有回答好)
面试官: 哦,索引有关的知识我们暂时就问这么多吧。你们线上数据的事务隔离级别是什么呀?

总结&感悟

通过这次面试,发现像阿里这种大厂对于底层知识还是比较看重的,这次面试关于索引的知识,自己大概能回答70%,但是自信答对的只占一半, 我以前以为关于索引最多也就问一下Hash和B+有什么区别,没想到最后都能问到查询优化器上面。看来自己索引有关的知识了解的还是不够多。

为了让熟练掌握MySQL,苦学了近2个月,并整理了这些MySQL从基础到架构到优化的学习笔记,可以说很全面,独家一份,有需要的朋友在文末领取!

不多说,先来看看MySQL高级知识笔记总目录




内容展示
面试不惧SQL!看了蚂蚁金服专家给的MySQL高级笔记,每个知识都很细
诚心分享,因为上传好像是要积分所以我把它放在我的公众号上了,有需要的朋友关注后回复【笔记】可免费获取下载链接了!

猜你喜欢

转载自blog.csdn.net/rxh811/article/details/106548933
今日推荐