前言
🚀 博主介绍:大家好,我是无休居士!一枚任职于一线Top3互联网大厂的Java开发工程师! 🚀
💡 无论你是刚刚踏入编程世界的新人,还是希望进一步提升自己的资深开发者,在这里都能找到适合你的内容。我们共同探讨技术难题,一起进步,携手度过互联网行业的每一个挑战。
📣 如果你觉得我的文章对你有帮助,请不要吝啬你的点赞👍分享💕和评论哦! 让我们一起打造一个充满正能量的技术社区吧!
目录标题
- 前言
- 1.MySQL的整体架构
- 2.InnoDB存储引擎架构的内存和磁盘结构
- 2.1InnoDB内存结构
- 2.2InnoDB磁盘结构
- 3.InnoDB内存结构空间复杂度和时间复杂度分析 ⏳
- 3.1 空间复杂度
- 3.2 时间复杂度
InnoDB是MySQL默认的存储引擎,它支持事务处理、行级锁定以及外键约束等特性。InnoDB的设计目标是提供高性能和高可靠性,因此它的内部结构非常复杂且高效。
InnoDB使用了多种内存缓冲区来提高性能,主要包括:
- Buffer Pool:用于缓存表数据和索引。
- Change Buffer:用于缓存插入、更新和删除操作。
- Adaptive Hash Index:自适应哈希索引,加速某些查询。
- Log Buffer:日志缓冲区,用于缓存重做日志(redo log)。
InnoDB的数据存储在磁盘上,主要包含以下几个部分:
- System Tablespace:系统表空间,包含数据字典和其他系统信息。
- File-per-Table Tablespaces:每个表一个文件的表空间,用于存储单个表的数据。
- Redo Log Files:重做日志文件,记录事务的变更。
- Undo Log:回滚日志,用于事务回滚和MVCC(多版本并发控制)。
1.MySQL的整体架构
2.InnoDB存储引擎架构的内存和磁盘结构
官网架构
由图可知 InnoDB的底层结构主要由2部分组成:内存结构和磁盘结构。
个人理解
2.1InnoDB内存结构
2.2InnoDB磁盘结构
磁盘中各数据页的整体结构如下图所示:
单个数据页包含哪些内容呢?
3.InnoDB内存结构空间复杂度和时间复杂度分析 ⏳
3.1 空间复杂度
- Buffer Pool:假设缓存页数为
N
,每页大小为M
,则空间复杂度为O(N * M)
。 - Change Buffer:假设变更操作数量为
K
,则空间复杂度为O(K)
。 - Adaptive Hash Index:假设哈希索引条目数量为
H
,则空间复杂度为O(H)
。 - Log Buffer:假设日志条目数量为
L
,则空间复杂度为O(L)
。
3.2 时间复杂度
- Buffer Pool:读写操作的时间复杂度为
O(1)
(哈希查找)。 - Change Buffer:添加变更操作的时间复杂度为
O(1)
(队列操作)。 - Adaptive Hash Index:查找操作的时间复杂度为
O(1)
(哈希查找)。 - Log Buffer:写入日志的时间复杂度为
O(1)
(列表追加)。