看完本篇章,您将了解到:
- 整体架构: InnoDB存储架构是怎样的 (1、MySQL架构)
- 工作原理: 查询语句的底层执行流程是怎样的 (2、查询SQL执行流程)
- IO性能: 文件
IO操作
写磁盘有哪几种方式,有什么IO优化方式 (3.1.2、关于磁盘IO的方式) - 缓存:
InnoDB缓存
(buffer pool, log buffer)的刷新方式有哪些(3.1.2.2、innodb_flush_method) - 缓存: log buffer是在什么时候写入到磁盘的(3.10.2、如何保证数据不丢失 - 其中第四步log buffer持久化到磁盘的时机为)
- 缓存: 为什么redo log prepare状态也要写磁盘?(3.10.2、如何保证数据不丢失 - 为什么第二步redo log prepare状态也要写磁盘?)
- 缓存: 脏页写盘一般发生在什么时候(3.10.2、如何保证数据不丢失 - 其中第五步:脏页刷新到磁盘的时机为)
- 缓存: 为什么唯一索引的更新不可以借助change buffer(3.2、Change Buffer)
- 缓存:
log buffer
的日志刷盘控制参数innodb_flush_log_at_trx_commit
对写性能有什么影响(3.4.1、配置参数) - 缓存: buffer pool的LRU是如何实现的,为什么要这样实现(3.1.1、缓冲池LRU算法)
- 表存储: 系统表空间的结构,MySQL InnoDB磁盘存储格式,各种
表空间
(系统表空间,独立表空间,通用表空间)的作用和优缺点是什么,ibdata
、ibd
、frm
文件分别是干嘛的(3.5、表空间) - 行字段存储: 底层页和行的存储格式(3.6、InnoDB底层逻辑存储结构)
- 行字段存储:
varchar
,null
底层是如何存储的,最大可用存储多大的长度(3.6.3.1、MySQL中varchar最大长度是多少) - 行字段存储: 行记录太长了,一页存不下,该怎么存储?(3.6.3.2、行记录超过页大小如何存储)
- 索引: 数据库
索引
的组织方式是怎样的,明白为什么要采用B+树
,而不是哈希表、二叉树或者B树(3.7、索引 - 为什么MySQL使用B+树) - 索引: 索引组织方式是怎样的,为什么
大字段
会影响表性能(查询性能,更新性能)(3.7、索引) - 索引:
覆盖索引
、联合索引
什么情况下会生效(3.7.2、辅助索引) - 索引: 什么是
索引下推
,索引下推减少了哪方面的开销?(3.7.2、辅助索引 - 索引条件下推) - 索引:
Change Buffer
对二级索引DML语句有什么优化(3.2、Change Buffer) - 数据完整性: MySQL是如何保证数据完整性的,
redo log
、undo log
和buffer pool
数据完整性的关键作用分别是什么(3.10.2、如何保证数据不丢失) - MVCC:
MVCC
底层是怎么实现的,可重复读和读已提交是怎么实现的(3.11.2、MVCC实现原理) - 双写缓冲区有什么作用(3.9、Doublewrite Buffer)
- Redo Log在一个事务中是在什么时候写入的?binlog和Redo Log有什么区别?(3.10.1、Redo Log在事务中的写入时机)