一条MySQL查询语句的执行流程

一条查询SQL在MySQL中的执行经历

大体上来分,Mysql分为Server层和存储引擎层两部分
  • Server层
    • 连接器
    • 查询缓存
    • 分析器
    • 优化器
    • 执行器等
    • 以及所有的内置函数
    • 所有跨存储引擎的功能,比如存储过程、触发器、视图等等
  • 存储引擎
    • 负责数据的存储和提取
    • 插件式的架构模式,支持多个存储引擎,如InnoDB、MyISAM、Memory等
    • Mysql5.5.5版本之后是默认的存储引擎
Server层的整体介绍
连接器
  • 职责:连接器负责和客户端建立链接、获取权限、维持和管理链接
1. 建立连接
  • 连接命令:mysql -h i p − P ip -P ipPport -u$user -p
  • 密码也可以直接跟在p后面,但是会明文展示,存在风险
2. 获取权限
  • 如果用户名或密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行。
  • 如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。
3. 维持和管理链接
  • 如果链接完成后,没有动作,链接就处于空闲状态,可以在show processlist命令中看到,Command为Sleep代表空闲
  • 如果客户端长时间没有动静,连接器就会自动断开。这个时间参数是:wait_timeout控制,默认值是8小时
  • 如果链接被断开之后,客户端再次发送请求的话,会出现错误:Lost connection to MySQL server during 。需要重新建立链接才行。
  • MySQL在执行过程中临时使用的内存管理在连接对象里面,这些资源会在连接断开的时候释放。因此Mysql出现OOM的时候,可以查看MySQL中的长连接是否过多
Mysql5.7或者更新版本,可以在执行一个比较大的操作之后,通过执行mysql_reset_connection来初始化连接资源,
这个过程不需要重新做重连和重新权限验证的操作,但是会将连接恢复到刚刚创建完时的状态。
查询缓存(做什么)
  • 职责:顾名思义,缓存之前查询的一些数据
  • Mysql8.0版本已经直接将查询缓存的整块功能删除了。
  • 存储结构是key-value形式。key 是查询的语句,value 是查询的结果。
  • Mysql提供按需使用的方式,可以将参数query_cache_type设置成DEMAND,这样对默认的SQL语句都不使用查询缓存。需要的可以显式指定,如下:
mysql> select SQL_CACHE * from T where ID=10;
分析器(该怎么做)
  • 职责:对 SQL 语句做解析
词法分析
  • 分析语句中每个词代表的是什么
语法分析
  • 根据语法规则,判断输入的SQL语句是否满足Mysql语法
  • 如果语句不对,就会收到“You have an error in your SQL syntax”的错误提醒
优化器
  • 职责:决定索引的使用和表的连接顺序
执行器
  • 职责:根据表的引擎定义,去使用这个引擎提供的接口
  • 上述语句的示例讲解
1、调用 InnoDB 引擎接口取这个表的第一行,判断 ID 值是不是 10,如果不是则跳过,如果是则将这行存在结果集中;
2、调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。
3、执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。

慢查询日志中rows_examined字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的。在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值