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

本文详细阐述了MySQL中一条SQL查询语句的执行流程,包括客户端连接、查询缓存检查、语法解析、查询优化、存储引擎交互及结果返回。特别指出,MySQL8.0已废弃查询缓存,因缓存命中率低且维护成本高。文中还分析了查询缓存的弊端,如大小写敏感的哈希查找和频繁的缓存失效问题。
摘要由CSDN通过智能技术生成

一条 sql 查询语句的执行过程

一条 sql 查询语句的执行过程

  1. 客户端(client)通过连接器(Connection Handing & net I/O)连接到 MySQL 服务器。
  2. 如果服务器开启了查询缓存,则去检查缓存(Query Cache),如果缓存中有结果集,则直接返回结果集。
  3. MySQL 通过语法解析器(Parser)对 SQL 语句进行解析,它将使用 MySQL 语法规则对解析树进行验证和解析,例如验证是否使用错误的关键字、使用关键字的顺序是否正确,或者字符串上面的引号有没有闭合等。
  4. 查询优化器(Optimizer)负责根据解析树生成一个最优的查询计划。
  5. 运行查询计划,通过存储引擎接口(Pluggable Storage Engine API)进行查询。
  6. 将结果集返回给客户端,如果开启了查询缓存,则缓存结果集。

注:MySQL 8.0 将不再支持查询缓存。

查询缓存的弊端:

  • MySQL 会检查查询缓存,进行大小写敏感的哈希查找。查找规则比较严格,即使查询和缓存中的查询只有一个字节的差异,也表示不匹配,查询就会进入下一阶段。
  • 缓存失效频率高:查询缓存系统会跟踪查询中涉及的每个表,如果这些表的结构或数据发生了改变(INSERT、 UPDATE、DELETE、TRUNCATE TABLE、ALTER TABLE、DROP TABLE或 DROP DATABASE),那么和这个表相关的所有缓存数据都将失效。

参考 《 MySQL DBA 修炼之道》
图片来自 原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值