MySQL八股学习总览-from 小林coding
- MySql执行流程
- 连接MySQL服务器
- 查询缓存
- 解析SQL
- 执行SQL
- 预处理器
- 优化器
- 执行器
MySql执行流程
连接MySQL服务器
经过如下的命令,就可以与MySQL服务器建立起连接,三次握手
mysql -h$ip -u$user -p
服务端查询多少个客户端连接
show processlist
MySQL的连接是长连接,MySQL定义了空闲连接的最大空闲时长,由wait_timeout控制,默认值是8小时,查询设定的超时时间
show variables like 'wait_timeout';
MySQL最大连接数量
show variables like 'max_connections';
MySQL长连接后导致内存占用增多的问题,解决方案
- 定时断开长连接
- 客户端主动重置
查询缓存
对于更新比较频繁的表,查询缓存反而是副作用,在MySQL8.0这个功能被删除
解析SQL
- 进行词法分析
- 语法分析
执行SQL
- 每条语句预处理阶段
- 优化阶段
- 执行阶段
预处理器
两件事
- 查询SQL语句中的表或者字段是否存在
- 将select *中的 *转换成表上所有的列
优化器
将SQL语句的执行方案定下来
执行器
三种查询方式
- 主键索引查询
- 全表扫描
- 索引下推
重点解释一下索引下推,假设有如下的sql语句,并且age和reward建立了联合索引
select * from t_user where age > 20 and reward = 100000;
在MySQL5.6版本前没有索引下推的情况下,查询过程如下
先对age > 20使用索引进行查询,查到一个主键,然后回表,查询完整的值,然后进行回表操作,将完整的记录返回,server再判断是否reward = 100000
在MySQL5.6版本之后存在索引下推的情况下,查询过程如下
先对age > 20使用索引进行查询,查到一个主键,这里先不回表,看reward是否为100000,是的情况下才进行回表操作,将完整的记录返回,