mysql结构与sql执行


新更新详解 mysql结构与sql执行流程

mysql大体结构

客户端:PHP、Navicat等
服务端:
连接层: 主要是线程管理,对程序连接的管理 (用户密码等处理)
sql层: 解析sql,优化sql语句 )
存储引擎: innodb存储引擎,myisam存储引擎

流程:
用户=>php=>mysql=>php=>用户
连接层:用户密码等处理 (mysql -uroot -p)

查询缓存(8.0之后废除)
sql层:(解析器=>sql解析器,语法解析器,优化器,sql语句接口)

innodb存储引擎,myisam存储引擎

磁盘

show variables like “%max_connections%” 查询最大的连接数
show processlist 查询当前用户的连接

连接长短之分:
短连接:开始连接–效验-数据查询-返回结果-关闭连接(sleep)
长连接:开始连接–效验-数据查询-返回结果–数据查询-返回结果–数据查询-返回结果—关闭连接(默认8小时)

审计、数据分批导出等用长连接
默认短连接足够日常使用
在这里插入图片描述
在这里插入图片描述

mysql的连接层

连接层:

  1. 连接之后的用户密码的效验
  2. 对于效验之后的连接进行线程分配管理
  3. 对用户效验->对于数据库表的操作权限的一个效验 host的值 localhost/127.0.0.1
  4. 返回连接的id show processlist 查询当前用户的连接
  5. -1 抛出异常

sql层解析器

sql层:
sql 的sql语句接口:接收到由连接层传递的sql语句

  1. 先判断下sql语句的类型
    (query(select),dml(insert,update,delete),ddl(alter),status(show status) 等)
  2. 假设是query (8.0之前:先判断查询缓存是否开启,开启->查询缓存看是否命中,命中->直接返回结果,没有则继续执行。8.0之后:解析器:sql解析器->语法解析器)
    sql解析器:根据查询的sql语句将sql划分为小token(select,*,from,user,where,id,>,10)得到前面分解的token,根据token去进行排列组合(关键字and or)成解析树是根据where条件中的关键词来进行组合
    在这里插入图片描述

优化器的执行

根据解析树=>选择合适的执行计划(这个计划不一定是最优的)

  1. 获取表结构信息(字段信息,字段的类型,存储的位置,索引信息)获取的信息是查询的表的信息,如果是join那就两张表的信息
  2. 根据解析树进行条件过滤->主要是一些没有意义的查询 1=1
  3. 索引信息 来确定/判断执行计划
  4. 执行这个计划 在索引及条件等来过滤

sql执行流程

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值