本文正在参加「技术专题19期 漫谈数据库技术」活动
我有个朋友,嗯,对,一个朋友,之前参加面试,作为后端工程师,被问到了一个问题:MySQL发起查询到结果出来经历了什么?结果这位小伙伴嘿嘿一笑:”就是用户编写sql语句,服务器接受语句,然后服务器调用引擎,最后返回结果。“,结果面试官微微一笑,抿了口茶水,好的,我们聊聊别的........
那么我们今天来聊聊,MySQL的一条查询语句从发起到返回结果到底经历了什么吧。
MySQL逻辑架构
具体讲解
安照上面的图片顺序来讲:
- 客户端请求到MySQL服务器,首先连接器,连接器负责管理链家和权限校验,最经典的命令:mysql -u root -p123就是这里的,通过连接器,客户端的权限校验完成并且和服务器建立了连接,当然,仔细说来,这里的连接可能是长连接或者短连接。
2)客户端建立连接之后,sql语句会到分析器,分析器会对sql语句的词法和语法进行判断,词法判断用户的操作行为,是select 查询还是insert插入;语法判断sql语句的语法是否正确。
3)当然在分析的过程当中会查询缓存,如果缓存当中有命中的数据就直接返回数据,这里需要注意的是有可能客户端通过连接器直接访问到缓存当中。
4)sql数据通过分析器,也没有缓存,那么只能去请求引擎了,这个时候就有一个叫做优化器的东西会查询引擎执行操作需要的空间和时间,然后根据这些内容进行sql的优化,确保sql语句执行的效率。
5)执行器,其实这个部分可以看成是和引擎沟通的部分,操作引擎,接受引擎返回结果,然后返回给客户端。
6)数据库引擎,这个是用于存储,处理和保护数据的核心服务,可以控制访问权限并快速的处理事务,这个如果展开了,就大了。
结语
嘿嘿嘿,有了这个总结,我的朋友再遇到这样的问题就不怕了,大家还有什么补充的,欢迎指点啊。
本文正在参加「技术专题19期 漫谈数据库技术」活动