0
点赞
收藏
分享

微信扫一扫

mysql 查询执行过程 ①

mysql 查询执行过程 ①

查询执行过程

  1. 客户端发送一条查询给服务器
  2. 服务器先检查查询缓存,如果命中了缓存,立刻返回存储在缓存中的结果。
  3. 如果没有命中缓存,服务端进行sql 解析、预处理,再由优化器生成对应的执行计划。
  4. Mysql 根据优化器生成的执行计划,调用存储引擎的API 来执行查询。
  5. 将结果返回给客户端

Mysql 客户端和服务端之间的通信协议是半双工的,在任何一个时刻,要么由服务器向客户端发送数据,要么由客户端向服务器发送数据,这两个动作不能同时进行。

查询缓存

在解析一个查询语句之前,如果查询缓存是打开的,mysql 会优先检查这个查询是否命中查询缓存中的数据。这个检查是通过一个对大小写敏感的哈希查找实现的。查询和缓存中的查询只有一个字节不同也不会匹配缓存结果。

如果当前的查询恰好命中了查询缓存,在返回查询结果之前mysql 会检查一次用户权限。如果权限没有问题,mysql会直接从缓存中拿到结果并返回给客户端。

查询过程

将sql 转换成一个执行计划,mysql 依照这个执行计划和存储引擎进行交互。

解析sql,预处理,优化sql 执行计划。

语法解析和预处理

mysql 通过关键字将sql 语句进行解析,生成一个解析树,mysql 解析器使用mysql 语法规则验证和解析查询。

预处理器根据一些mysql 规则进一步检查解析树是否合法,然后预处理器验证权限

语法树校验完成后,由优化器转化为执行计划。一条查询可以有多种执行方式,优化器找到最好的执行计划。

举报

相关推荐

0 条评论