mysql 查询执行过程
mysql 查询执行过程
查询执行过程
客户端发送一条查询给服务器
服务器先检查查询缓存,如果命中了缓存,立刻返回存储在缓存中的结果。
如果没有命中缓存,服务端进行 sql 解析、预处理,再由优化器生成对应的执行计划。
Mysql 根据优化器生成的执行计划,调用存储引擎的 API 来执行查询。
将结果返回给客户端
Mysql 客户端和服务端之间的通信协议是半双工的,在任何一个时刻,要么由服务器向客户端发送数据,要么由客户端向服务器发送数据,这两个动作不能同时进行。
查询缓存
在解析一个查询语句之前,如果查询缓存是打开的,mysql 会优先检查这个查询是否命中查询缓存中的数据。这个检查是通过一个对大小写敏感的哈希查找实现的。查询和缓存中的查询只有一个字节不同也不会匹配缓存结果。
如果当前的查询恰好命中了查询缓存,在返回查询结果之前 mysql 会检查一次用户权限。如果权限没有问题,mysql 会直接从缓存中拿到结果并返回给客户端。
查询过程
将 sql 转换成一个执行计划,mysql 依照这个执行计划和存储引擎进行交互。
解析 sql,预处理,优化 sql 执行计划。
语法解析和预处理
mysql 通过关键字将 sql 语句进行解析,生成一个解析树,mysql 解析器使用 mysql 语法规则验证和解析查询。
预处理器根据一些 mysql 规则进一步检查解析树是否合法,然后预处理器验证权限
语法树校验完成后,由优化器转化为执行计划。一条查询可以有多种执行方式,优化器找到最好的执行计划。
版权声明: 本文为 InfoQ 作者【周杰伦本人】的原创文章。
原文链接:【http://xie.infoq.cn/article/866004027da9181054db3f8b4】。文章转载请联系作者。
评论