最近听了几场学长们的互联网大厂面试,发现关于sql的执行过程问的频率还很高,我就去百度了一下,回答的差不多吧都,只不过有的特别详细。以我目前的能力根本看不懂。所以我就简单总结一下大概流程,面试官问起来起码能把大概说出来,估计面试官也不会很为难我们。
话不多说,上图:
大概流程:
1、连接器
先登录连接数据库,然后进行用户的身份认证,包括校验账户密码,权限等操作,如果用户账户密码已通过,连接器会到权限表中查询该用户的所有权限,之后在这个连接里的权限逻辑判断都是会依赖此时读取到的权限数据,也就是说,后续只要这个连接不断开,即时管理员修改了该用户的权限,该用户也是不受影响的。
2、(MySQL 8.0 版本后移除)
先去查询缓存中去看一下是否执行过这条sql。但是这之前还要判断这条sql语句设计的表,这个用户是否有这个权限。
3、分析器
简单说就是看你这条sql有没有毛病,我觉得有防止某些用户恶意攻击数据库的功能。这时候我想到了redis的缓存穿透,用户短时间内大量访问数据库中没有的数据,导致数据库崩溃。不知道这个穿透和分析器之间有没有什么关系。
4、优化器
优化器就是对我们一条sql语句进行优化。比如我们进行多表查询的时候,优化器可能会对我们的表的连接顺序做一个优化。尤其是设计到索引的查询。这里还是有东西的。
5、执行器
经过上面的步骤,MySQL 就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果。
我是觉得目前阶段大家了解一下大概的流程就可以了,等以后工作了,有能力了,再去详细的了解背后的原理也不算晚。现在了解到这个程度也是可以接受的。当然肯定有小伙伴很爱探究原理,也很好。小伙伴们找到自己喜欢的学习方式然后把一个知识点搞清楚,能给人讲明白就可以了。
以上文章有什么错误的地方,希望小伙伴们在评论区指正~