MySQL问答一
MySQLMySQL大约 2 分钟
一条SQL的执行流程

- 连接器:管理链接、验证身份
- 查询缓存:如果是select语句,则会进行缓存查询(MySQL8.0后被移除)
- 解析器:解析SQL语句(表、字段不存在的解析不在解析器!!!)
- 词法分析:根据语句关键字构建SQL语法树
- 语法分析:根据SQL语法树,结合语法规则,分析SQL是否有问题
- 预处理器:针对SQL语句做前置处理如表、字段检测是否存在,
*扩展为表字段 - 优化器:讲SQL语句的执行方案(执行计划)定下来,如索引选择
- 执行器:有了执行计划,执行器负责执行SQL,执行期间与存储引擎交互,存储引擎返回记录,执行期进行判断是否满足查询条件
MySQL的结构
- Server端
- 连接器
- 解析器
- 预处理器
- 优化器
- 执行器
- 存储引擎
MySQL一张表对应的文件信息
例如一张test表
- db.opt:存储当前数据库的默认字符集和字符集校验规则
- test.frm:存储当前表的结构、元数据信息
- test.ibd:存储表数据,一个独立的表空间文件
InnoDB存储引擎的逻辑存储结构
相关信息
- 段(Segment)
- 区(Extent)
- 页(Page)
- 行(Row)
MySQL 一行记录的存储结构
InnoDB提供了4中行记录的存储格式:Redundant、Compact、Dynamic和 Compressed
- Redundant:MySQL5.0以前使用
- Compact:紧凑型行格式,为了数据页Page中能放更多的行Row,MySQL5.1为Dynamic和默认行格式
- Dynamic和 Compressed:都基于Compact进行改进,MySQL5.7使用Dynamic为默认格式

2
st=>start: 开始
e=>end: 结束
st->e
3
Powered by Waline v2.14.1