程序员,别说你只会增删改查.....
对于程序员来说,去任何一家公司面试,数据库是避不开的。开发人员对MySQL的掌握,越深入,你能做的事情就越多。
完成业务功能,懂基本的Sql语句。
做性能优化,懂索引,懂引擎。
做分库分表,懂主从,懂读写分离。
做安全,懂权限,懂备份,懂日志。
做云数据库,懂源码,懂瓶颈。
相信大家对于MySQL的索引都不陌生,索引(Index)是帮助MySQL高效获取数据的数据结构。索引作为MySQL中比较重点的知识,在面试中出现的频率特别高。楼主自认为对MySQL优化的索引相关知识有很多了解,同事们也都热情的称呼我为大佬。在面试阿里之前,特地花了1个月左右时间复习了很多相关知识。想不到还是被阿里面试官狠狠虐了一把…
(关于这次面试题目和整理的答案我附在了文末,有需要的同学自行领取哈)
前半段和面试官相谈甚欢,聊着聊着我提到我们业务量比较大,每天大概有几百万的新数据生成。
面试官来了兴趣:你们每天这么大的数据量,都是保存在关系型数据库中吗?
我:是的,我们线上使用的是MySQL数据库。
面试官:那你们有没有对于查询做一些优化呢?
我:我们在数据库中创建了一些索引(我现在非常后悔我当时说了这句话)。
面试官:你能说说为什么B+树相对于B树在查询上会更加优胜吗?
我:(这道题我背过答案!)B+树磁盘读写代价更低,;B+树查询效率更加稳定;对于范围查找来说,B+树只需遍历叶子节点链表即可,B树却需要重复地中序遍历…
面试官:除了上面这个范围查询的,你还能说出其他的一些区别吗?
我:???
聚簇索引、覆盖索引
面试官:刚刚我们聊到B+ Tree,那你知道B+Tree的叶子节点都可以存哪些东西吗?
面试官:聚簇索引和非聚簇索引,在查询数据的时候有区别吗?
面试官:刚刚你提到主键索引查询只会查一次,而非主键索引需要回表查询多次。是所有情况都是这样的吗?非主键索引一定会查询多次吗?
简化B+Tree
这些问题有点难,但还是凭借着自己的知识储备简单的回答上一些。
联合索引、最左前缀匹配
面试官:你们在创建索引的时候都会考虑哪些因素呢?你们有用过联合索引吗?
面试官:那你们在创建联合索引的时候,需要做联合索引多个字段之间顺序你们是如何选择的呢?
索引下推、查询优化
面试官:你知道在MySQL 5.6中,对索引做了哪些优化吗?
面试官:你们创建的那么多索引,到底有没有生效,或者说你们的SQL语句有没有使用索引查询你们有统计过吗?
我:这个还没有统计过,除非遇到慢SQL的时候我们才会去排查
面试官:那排查的时候,有什么手段可以知道有没有走索引查询呢?
面试官:那什么情况下会发生明明创建了索引,但是执行的时候并没有通过索引呢?
我:(依稀记得和优化器有关,但是这个问题并没有回答好)
面试官:哦,索引有关的知识我们暂时就问这么多吧。你们线上数据的事务隔离级别是什么呀?
MySQL查询过程
总结&感悟
通过这次面试,发现像阿里这种大厂对于底层知识还是比较看重的,这次面试关于索引的知识,自己大概能回答70%,但是自信答对的只占一半, 我以前以为关于索引最多也就问一下Hash和B+有什么区别,没想到最后都能问到查询优化器上面。看来自己索引有关的知识了解的还是不够多。
为了让大家熟练掌握MySQL优化,我特别邀请大数据平台资深专家Deer老师,为大家带来MySQL专题—— 《MySQL优化从基础到落地》,原价199元,公众号粉丝限时专享0.1元!
从面试必问知识点开始,一直讲到优化的最终落地。
《面试修仙季,MySQL优化从基础到落地》
学好MySQL,工作效率事半功倍,薪资更是轻松翻倍
Deer老师
国防科大创新联合中心负责人、前蚂蚁金服架构师;
擅长大数据平台管理,开发过多个高并发大数据项目;
适合人群
1. 熟悉数据库增删改查基本操作;
2. 立志于成为高级程序员、架构师;
3. 具备一定自学能力。
课程介绍:
3.18
从慢查询开始谈优化
慢查询以及工具
SQL语句优化
范式化与反范式化设计
索引以及带来的问题
3.19
执行计划与十大优化策略
执行计划的作用
索引是否使用的检查利器
谈谈Extra的作用
详解十大优化策略
MySQL及java进阶必备资料限时领取
19条效率提高3倍的MySQL超实用优化技巧及开发规范
附赠7.8G的Java架构进阶资料和阿里面试题目及答案
发送“000”扫码添加芊芊老师报名
“热爱是学习的最大动力。”