MySQL 基础原理剖析 MySQL 是我们在开发中经常使用的数据库管理系统,它的基础原理分析对于开发者来说非常重要。本文将从 MySQL 的查询基础原理剖析,事务、隔离、锁机制、索引优化、日志管理等机制进行分析。 数据存储结构 在 InnoDB 存储引擎中,所有的数据都被逻辑地存放在表空间中,表空间(tablespace)是存储引擎中最高的存储逻辑单位。在表空间的下面还包括段(segment)、区(extent)、页(page)。同一个数据库实例的所有表空间都有相同的页大小,默认情况下,表空间中的页大小都为 16KB,也可以通过改变 innodb_page_size 选项对默认大小进行修改。 页结构 页(page)是 MySQL 中存储的数据都是以二进制的形式存在的,页分为以下 7 个层次: 1. FileHeader 存储的是页的一些通用信息 2. PageHeader 存储的是页的一些特殊信息 3. Infimum + Supremum 存储的是页中最大的记录和最小记录的指针数据 4. UserRecords 则是具体的需要存的数据,以单链表的形式串联起来 5. FreeSpace 是页内未使用到的空间,UserRecords 不够就会到 FreeSpace 中申请,若 FreeSpace 慢了,就会进行溢出操作,通过地址偏移将剩余数据写到其他地方 6. PageDirectory 记录页中某些记录的相对位置 7. FileTrailer 校验页是否完整 记录结构 在单个数据页中,记录的顺序是以数据插入顺序以单链表的形式存储的。主键的顺序必须是有序的,但数据页的顺序是有数据插入决定的,那就可能造成数据无序,MySQL 通过页分裂的方式解决了这个问题。不同的页由双向链表关联,也要保证有序,即前面的页的最大值一定比后面的页的最小值小。 物理存储结构 MySQL 使用 InnoDB 存储表时,会将表的定义和数据索引等信息分开存储,其中前者存储在 .frm 文件中,后者存储在 .ibd 文件中。.frm 文件无论在 MySQL 中选择了哪个存储引擎,所有的 MySQL 表都会在硬盘上创建一个 .frm 文件,用来描述表的格式或者说定义。.ibd 文件是 InnoDB 中用于存储数据的文件,总共有两个部分,一个是系统表空间文件,包括 ibdata1、ibdata2 等文件,其中存储了 InnoDB 系统信息和用户数据库表数据和索引,是所有表公共的。 索引 索引是数据库中非常重要的概念,它是存储引擎能够快速定位记录的秘密武器,对于提升数据库的性能、减轻数据库服务器的负担有着非常重要的作用。索引优化是提升数据库性能的关键。
剩余30页未读,继续阅读
- 粉丝: 3
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助