sql语句如何执行

156 阅读2分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。

我们主要介绍下 mysql 中,一条 sql 语句是如何执行的。

总的来说,mysql 可以分为 server 层以及存储引擎两部分。

server 层包括连接器、查询缓存、分析器、优化器、执行器等,包含了绝大多数核心的服务。

存储引擎层负责数据的存储和读取。核心存储引擎是可替换的,可选的有,innodb、myisam、memeory 等多个存储引擎,最常用的就是 innodb 了,也是默认的引擎。不同的存储引擎数据存取方式不同,功能也不同。

我们重点介绍下server层:

  • 连接器:负责跟客户建立连接、获取权限、管理链接,常用的连接命令,如:mysql -h -P -u -p;连接完成后权限就已经确立了。需要注意的是,连接分为长连接和短连接,长连接就是客户端的请求一直复用一个连接,但是长连接使用的内存保存在连接对象里,连接断开的时候才会释放内存,所以需要做好内存清理。
  • 查询缓存:执行的查询命令会把结果做缓存,但是这有很大的弊端。因为只要有一个对表的更新,所有的缓存都会失效,命中率很低。8.0开始查询缓存功能没了。
  • 分析器:进行词法分析及语法分析,让 mysql 知道你要干什么,如果有错误进行提示。需要注意的是分析阶段,会判断表是否存在、列是否存在等
  • 优化器:确定语句的执行方案,会尽量选择较为高效的执行方案,即进行优化
  • 执行器:执行阶段,先进行的是权限验证;然后按照选择的引擎,执行这个引擎提供的接口

以上就是 mysql 中执行一条语句的简单流程,通过这个流程我们可以看出来 mysql 的整体设计架构,我们如果有类似的系统也可以按照这个思路来,尤其需要注意的是插件式的引擎层设计思路,非常值得学习。