mysql大体结构
- 连接层,通过sock进行通信,提供api供客户端使用
- sql层,解析,优化sql语句,选择最优执行方案
- 存储引擎 innodb myisam
- 客户端
- 服务端
- 连接线程,连接层,主要用来管理mysql对于程序连接
- 优化器+解析器+查询缓存-》sql层,处理优化sql语句,指定执行计划
- 存储引擎接口,获取存储引擎中的数据
- 核心api:主要io,字符串处理,内存管理
- 存储引擎,存储用户记录的信息
连接层
- 连接后进行用户名密码校验,如果异常,返回并抛出异常,show variables like “%max_connections%”; mysql最大连接数
- 最大连接数100,1000访问,会出现短暂的延迟,但不会阻塞
- show processlist 查看连接状况
- 验证后,会分配一个线程进行处理
- 查询权限
- 返回连接id
sql层
- sql层接口接收sql语句
- 判断sql语句类型
- dml update select insert
- ddl alter
- rep主从相关
- 状态查询,参数查询 show status等
- 如果为query,判断是否开启了缓存,如果开启并命中,返回数据
- 没有命中缓存,使用解析器对sql解析,解析成令牌(词法分析和语法分析)
- 语法分析,根据令牌进行组装,组装成数据结构,生成抽象语法树
- 优化器,根据得到的解析树选择合适的执行计划
- 获取表结构(字段,字段类型,索引,存储位置)获取要查询表的信息,join的话就是多个表
- 根据解析树进行条件过滤,会过滤掉一些没有意义的查询如1=1,对常量表达式转化成常量,调整查询结构,分析索引信息
- 判断查询计划
- 如何执行性能是最优方案,方案并不一定正确
- 查询缓存,8.0开始逐步删除查询缓存,8.1正式删除,因为查询缓存存在问题
存储引擎
- 提供存储引擎接口获取磁盘数据
网友评论