1、面试题
SQL调优的常用手段
2、面试官心里分析
说实话,这个其实就是针对你有没有最最基础的线上SQL跑的慢的优化能力
3、面试题剖析
如果是应付面试,我们实在是不可能深入讲mysql的SQL优化,以后架构班里都会深入讲解,但是这里给大家说一句,互联网公司的系统,一般很少需要复杂的SQL优化,为啥呢?因为我说过很多次了,保持SQL简单,一般90%的SQL都建议是单表查询,join等逻辑放java代码里实现,不要放SQL里。
既然是单表查询了,你觉得还能有什么性能问题么?对吧
如果某个线上SQL跑的慢,十有八九就是因为那个SQL没有用索引,所以这个时候,第一步就是去看MySQL的执行计划,看看那个SQL有没有用到索引,如果没有,那么就改写一下SQL让他用上索引,或者是额外加个索引。
我的面试突击课里就讲这种互联网公司最经典和常用的SQL优化手段,其他的大家为了面试准备,可以临时去网上搜个帖子,MySQL SQL优化,随便记住一些到时候说说即可。
我这里其实主要就是讲下怎么看SQL的执行计划,这个是码农必备能力,必须能看懂执行计划,一般其实就是看SQL有没有走索引,你倒是可以在这个环节重点说下你对执行计划这块的理解就ok
explain select * from table,就ok了
table | type | possible_keys | key | key_len | ref | rows | Extra
table:哪个表
type:这个很重要,是说类型,all(全表扫描),const(读常量,最多一条记录匹配),eq_ref(走主键,一般就最多一条记录匹配),index(扫描全部索引),range(扫描部分索引)
possible_keys:显示可能使用的索引
key:实际使用的索引
key_len:使用索引的长度
ref:联合索引的哪一列被用了
rows:一共扫描和返回了多少行
extra:using filesort(需要额外进行排序),using temporary(mysql构建了临时表,比如排序的时候),using where(就是对索引扫出来的数据再次根据where来过滤出了结果)