在《明白了MySQL内部结构才能成为高手!》里我们对MySQL框架有了一定的了解。
现在让我们看看数据库收到请求后会发生什么?
1.建立连接与验证:
1.1客户端与MySQL服务器建立TCP连接。
1.2服务器验证用户的登录权限。
2.查询解析与优化
2.1服务器为该连接创建一个工作线程。
2.2线程解析SQL语句,检查其语法和语义是否正确。
2.3优化器生成执行计划,决定获取数据的最优路径(例如,选择哪个索引)。
3.数据获取与缓存
3.1执行引擎首先在 Buffer Pool(缓冲池) 中搜寻所需的数据页是否已被缓存。
3.2如果所需数据不在内存中,则从磁盘扫描数据并将其加载到 Buffer Pool 中。
4.返回结果与清理
4.1服务器从 Buffer Pool 中获取数据并进行处理(如排序、计算)。
4.2将最终结果返回给客户端。
4.3查询结束后,释放资源:关闭表、工作线程,最后关闭连接。
下面是数据库4个角度介绍该流程:
首先,在连接层,客户端通过TCP连接与服务端的连接管理模块交互,申请连接线程。连接池分配空闲线程或按需创建新线程处理请求。随后调用用户模块进行授权认证,验证通过后,连接线程开始接收并处理客户端请求。请求分为两类:需经解析器处理的SQL语句和可直接执行的命令。
进入SQL层后,连接线程将SQL语句交予解析器进行语法和语义分析。若是查询类请求,先由查询缓存检查是否已有结果,存在则直接返回,否则转交优化器生成执行计划。若是数据变更语句,则分发给对应的处理器(如Insert、Update处理器)执行。该层完成SQL的解析与初步优化。
存储引擎层负责具体数据操作。处理器首先通过访问控制模块验证用户对目标表和字段的权限,若有权限则调用表管理模块打开表并申请相应锁。随后根据表的存储引擎类型,由存储引擎接口模块调用对应的底层存储引擎实现模块执行实际操作。表管理模块仅依赖标准接口,底层存储引擎的具体实现对其透明。
最后,处理完成后,控制权交还连接线程。若执行成功,将结果集或成功标识返回客户端;若发生错误,则返回错误信息。连接线程进行清理工作后继续等待后续请求,最终关闭连接并释放线程资源。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程