MySQL执行一条SQL语句的过程

MySQL的架构包括Server层和存储引擎层,Server层处理SQL的解析、执行和权限验证,存储引擎层负责数据的存储和检索。InnoDB是最常用的存储引擎,支持B+树索引。连接器处理客户端连接,查询缓存(在MySQL8.0后移除)用于存储查询结果,解析器则解析SQL语句。预处理、优化和执行阶段确保SQL的正确执行。
摘要由CSDN通过智能技术生成

MySQL的架构分为Server层和存储引擎层。

● Server层负责建立、分析和执行SQL:MySQL 大多数的核心功能模块都在这实现,主要包括连接器,查询缓存、解析器、预处理器、优化器、执行器等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存储过程、触发器、视图等。)都在 Server 层实现。
● 存储引擎层负责数据的存取:支持 InnoDB、MyISAM、Memory 等多个存储引擎,不同的存储引擎共用一个 Server 层。现在最常用的存储引擎是 InnoDB,从 MySQL 5.5 版本开始, InnoDB 成为了 MySQL 的默认存储引擎。我们常说的索引数据结构,就是由存储引擎层实现的,不同的存储引擎支持的索引类型也不相同,比如 InnoDB 支持索引类型是 B+树 ,且是默认使用,也就是说在数据表中创建的主键索引和二级索引默认使用的是 B+ 树索引。

1.连接器

  1. 当客户端向MySQL服务器发起连接请求的时候,会进行三次握手,因为MySQL是基于TCP协议进行传输的。
  2. 完成连接后,MySQL会进行登录校验,检测用户的用户名密码是否正确。
  3. 用户密码都没问题,连接器会获取用户的权限保存起来,后续在该连接中的操作都将基于这个权限。所以当一个用户建立连接后他的权限被修改,也不会影响已经存在连接的权限,修改完成后才会使用新的权限。

2. 查询缓存(MySQL8.0之前的版本)

  1. 在连接器完成工作之后,客户端可以向MySQL发送SQL语句了,在服务器收到SQL语句之后,会解析其第一个字段,看是否是查询(select)请求,如果是查询请求,则会去缓存中查询,缓存中的值是以key-value形式存储的,key为SQL语句,value为查询到的值。
  2. 当数据表被更新后,这个表的缓存就会被清空,因此对于更新比较频繁的表,这个查询缓存的命中率会很低,因此MySQL8.0版本删除了这个功能。

这里说的查询缓存是Server层的,并不是InnoDB中的缓存池。

3.解析器

在正式执行SQL语句之前,会对其进行解析。

  1. 首先进行词法解析,通过识别语句中的关键字构建SQL语法树,便于后续模块查找语句的SQL类型,表名、字段名等。
  2. 随后进行语法解析,根据语法规则判断这个SQL语句是否合法。

4.执行SQL

该过程分为三个阶段:预处理阶段,优化阶段,执行阶段。

  1. 预处理阶段:检查SQL语句中的表或字段是否存在。将select语句中的*拓展为所有字段。
  2. 优化阶段:确定语句的最终执行方案,比如表中存在多个索引的时候,优化器会基于成本的考虑决定采用那个索引。
  3. 执行阶段:根据计划执行SQL语句,从存储引擎中读取数据,逐条返回给客户端。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值