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会在这时缓存查询

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值