基础架构
架构图
MySQL 架构分为两部分,server层 与 存储引擎。其中 server 包含 连接器、查询缓存、分析器、优化器、执行器。存储引擎架构模式为插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎,最常用的是 InnoDB。
Server 层各部分功能职责
连接器
- 建立数据库连接,验证用户名密码是否匹配。
- 读取用户权限信息并记录下来之后所有的权限验证都使用这个信息。(建立连接后修改了用户权限,需要重新登录才会生效。就是因为 MySQL 这一步的操作)
- 权限验证时机
- 在查询缓存命中返回结果之前。
- 执行器执行之前。
查询缓存
- 查询语句优先查询缓存,如果缓存命中直接返回。否则继续按序执行。通过SQL语句来判断缓存是否命中。
- 缓存存储内容为 key,value 形式,执行SQL语句是 key,结果是 value
- 每当表发生更新动作,缓存内容先被清空。
- 不建议使用,通过 query_cache_type demand 关闭。查询时指定使用缓存 (MySQL 8.0 之后删除了这个功能。)
mysql> select SQL_CACHE * from T where ID=10;
分析器
- 获取语义,分析输入的语句是什么目的,是查询还是删除还是修改等等。
- 语法分析,检查语法输入是否正确。
- 表、字段分析,分析要执行的表或字段是否存在。
优化器
- 对SQL执行语句进行优化,是否使用索引,多结果集如何关联查询等。
执行器
- 执行优化器优化后的 SQL 语句,在执行前进行权限验证,使用的信息为连接器提供的权限信息。
- 调用存储引擎接口执行具体的 SQL 语句。
存储引擎
- 提供数据访问接口。
- 进行数据的持久化存储。
一条查询语句是如何执行的
mysql> select * from T where ID=10;
- 建立连接
- 查询缓存
- 语义语法分析
- 语句优化
- 执行执行,调用存储引擎接口查询数据
- 返回结果