MYSQL系列--explain学习使用

本文详细介绍了MySQL的EXPLAIN执行计划,包括SQL执行过程、查询结果集的发送逻辑、LRU-K淘汰策略以及EXPLAIN的各个字段解释。通过理解这些概念,可以帮助优化查询性能,避免全表扫描和内存瓶颈。
摘要由CSDN通过智能技术生成

MYSQL系列–explain

一、EXPLAIN----执行计划----基于5.7版本


SQL执行过程

1、mysql会通过关键字将SQL解析,生成解析树,通过语法规则验证(关键字是否正确、顺序是否错误、检查表、列是否存在等);
2、合法解析树通过优化器转化为查询计划调用存储引擎的API执行;
3、mysql可通过查询当前会话的last_query_cost计算当前查询成本;
show status like ‘last_query_cost’;
#表示需要做*个数据页的随机查找才能完成以上查询;这个值是根据列统计信息得出(每张表、索引的页面个数、索引基数、索引和数据行的长度、索引的分表情况等);
4、查询语句状态变化:
1)语句进入执行阶段后,状态为Sending data;
可使用show profile 查看;
Sending data:存储引擎返回数据到server端发送数据到客户端->发生客户端
注意:Sending data 不一定是指正在发送数据,也可能处于执行器过程中的任意阶段(总之就是可以再优化)
#建议通过索引、limit,减少需要扫描的数据行;
在这里插入图片描述总结:
MYSQL查询执行过程总的步骤:
1、客户端向服务器发送查询请求;
2、mysql首先检查查询缓存,如果命中,则立即返回缓存池的结果,否则进入下一阶段;
3、进行SQL解析、预处理(校验过程)、由优化器生成对应执行计划;
4、根据执行计划调用存储引擎API执行;
5、结果返回客户端,同时缓存查询结果;

从系统角度出发:
SQL解析——>优化器——>遍历B+树——>修改undo日志——>追加redo日志(prepare过程,待commit提交)——>追加binlog(binlog日志写完回头修改redo日志状态为commit ----保障数据事务一致性)

mysql —SQL查询结果集说明

1、边算边发逻辑

mysql采用的是边算边发逻辑,对于数据量很大的查询来说,不会再server端保存完整结果集;所以当客户端读取结果不及时时,会堵住mysql查询过程,但不会打爆内存。

2、淘汰策略

由于InnoDB引擎内部,由于有淘汰策略,关键是基于LRU算法的优化:——LRU-K

#LRU-K
LRU-K算法
LRU-K中的K代表最近使用的次数,因此LRU可以认为是LRU-1。LRU-K的主要目的是为了解决LRU算法“缓存污染”的问题,其核心思想是将“最近使用过1次”的判断标准扩展为“最近使用过K次”。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值