1、一条sql语句的执行(mysql的基础架构)
(1)客户端
(2)server层:所有跨存储引擎的功能都在这一层实现,如内置函数、存储存储过程、触发器、试图等
- 连接器:连接管理,权限验证
- 查询缓存:查询缓存往往弊大于利,MySQL 8.0 版本直接将查询缓存的整块功能删掉了
- 分析器:分析sql语句要做什么,词法分析,语法分析
- 优化器:分析具体怎么做,选择执行的索引,生成执行计划
- 执行器:操作引擎,调用存储引擎的接口去具体的操作, 返回结果
(3)存储引擎
负责数据的存储和提取,是插件式的,支持MyISAM、InnoDB等,默认的存储引擎(MySQL 5.5.5 版本后)为InnoDB
2、MySQL数据库中MyISAM和InnoDB的区别
(1)事务:InnoDB支持,MyIsam不支持
(2)行锁:InnoDB支持,MyIsam不支持
(3)外键:InnoDB支持,MyIsam不支持
(4)聚簇索引和非聚簇索引:聚簇索引指的是数据和索引是在一起的,非聚簇索引指数据和索引分开,即索引中不包含具体数据。
InnoDB的主键索引为聚簇索引,非主键索引为非聚簇索引,MyISAM中只有非聚簇索引
(5)总数据行数:InnoDB中不保存表的总的数据行数,执行Select count(*) from table时做全表扫描;MyIsam会记录总的数据行数。
3、一条sql更新语句的执行
(1)基本流程:
- 从磁盘读取数据页到内存中
- 将内存中对应数据进行修改
- 将修改后的数据写入到磁盘中
(2)ChangeBuffer的作用:
- 在执行更新语句时进行优化,可以减少磁盘读取的次数
- 要修改的数据页不在内存中,直接将数据的修改记录到ChangeBuffer中并记录日志,当真正要读取该数据时,将ChangeBuffer中对应的数据修改merge到内存的数据页中
- 当存在对唯一性索引的修改时不能使用ChangeBuffer
&#x