mysql结构与sql执行

    科技2024-12-11  27

    mysql结构与sql执行(六星学习笔记)

    mysql大体结构mysql的连接层sql层解析器优化器的执行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的连接层

    连接层:

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

    sql层解析器

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

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

    优化器的执行

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

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

    sql执行流程

    Processed: 0.011, SQL: 8