当前位置:   article > 正文

mysql-查询原理_mysql 查询原理

mysql 查询原理

mysql是如何执行查询?

1.客户端将查询发送到服务器

2.服务器检查查询缓存,如果找到了,就从缓存中返回结果,否则进行下一步

3.服务器解析,预处理和优化查询,生成执行计划

4.执行引擎调用存储引擎api执行查询

5.服务器将结果返回给客户端

 

 

详解每个步骤:

1.客户端将查询发送到服务器

1.1.首先需要知道,客户端用一个数据包将查询发送到服务器,一旦客户端发送了查询,剩下的就是等待结果。如果一个查询过大,比如批量插入,有时会出现"MySQL server has gone away"的错误,导致的原因可能就是传送的数据太大,导致连接断开了,可以通过 SHOW VARIABLES LIKE "max_allowed_packet"  命令查看你的服务器所允许传送的最大数据,可在my.ini里配置。

2.服务器检查查询缓存

2.1.在解析一个查询之前,如果开启了缓存,MySql会检查查询缓存,进行大小写敏感的哈希查找。即使查询和缓存中的查询只有一个字节的差异,也表示不匹配,查询就会进入下一步

2.1.MySql查询缓存保留了查询返回给客户端的完整结果,当缓存命中的时候,服务器马上返回保存的结果(会先检查权限),并跳过解析、优化和执行步骤。查询缓存保留了查询使用过的表,如果表发生了改变(如update),那么缓存的数据就失效了

 

3.服务器解析、优化,生成执行计划

3.1.如果查询缓存中没有,下一步就是将查询转变成执行计划,包括解析、预处理、优化三个过程

3.2.解析器-将查询分解成一个个标识,构造"解析树",解析器会检查基本语法错误

3.3.预处理器-检查解析器构造出的解析树,检查无法解析的语义,如:列别名、表别名

3.4.优化器-将解析树变成执行计划,可以通过explain extend + 查询语句 + show warning,查看到重建后的sql

 

4.执行引擎调用存储引擎api执行查询

4.1.MySql查询执行引擎使用执行计划来处理查询。和优化部分相反,执行部分不会很复杂

 

5.返回结果到客户端

5.1.执行计划的最后一步是将结果发送到客户端,即使查询没有结果要返回,服务器也会对客户端的联接进行应答,比如有多少行受了影响

5.2.如果查询是可缓存的,MySql会在这时缓存查询

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号