MySQL八股学习总览-from 小林coding

MySQL八股学习总览-from 小林coding

  • MySql执行流程
    • 连接MySQL服务器
    • 查询缓存
    • 解析SQL
    • 执行SQL
      • 预处理器
      • 优化器
      • 执行器

MySql执行流程

MySQL八股学习总览-from 小林coding_第1张图片

连接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长连接后导致内存占用增多的问题,解决方案

  1. 定时断开长连接
  2. 客户端主动重置

查询缓存

对于更新比较频繁的表,查询缓存反而是副作用,在MySQL8.0这个功能被删除

解析SQL

  1. 进行词法分析
  2. 语法分析

执行SQL

  1. 每条语句预处理阶段
  2. 优化阶段
  3. 执行阶段

预处理器

两件事

  • 查询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,是的情况下才进行回表操作,将完整的记录返回,

你可能感兴趣的:(mysql,学习,数据库)