InnoDB引擎-逻辑存储结构

MySQL5.5版本开始,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发使用非常广泛。

逻辑存储结构

InnoDB引擎-逻辑存储结构_第1张图片

表空间tablespace (ibd文件)

  一个mysql实例可以对应多个表空间,用于存储记录、索引等记录

mysql的文件位置在 /var/lib/mysql

以ibd为后缀的表空间文件,表空间文件并不是唯一的,我们打开一个数据库,一般一个表会对应一个表空间文件。

InnoDB引擎-逻辑存储结构_第2张图片


段Seqment

       分为数据段、索引段、回滚段
       InnoDB是索引组织表,使用的是B+树,数据段是B+树的叶子节点,索引段就是B+树的非叶子节点,段用来管理多个Extent(区)。
       B+树上叶子节点上有数据,非叶子节点上没有数据,只有索引。

InnoDB引擎-逻辑存储结构_第3张图片


区Extent

      每个区的大小为1M,默认情况下,InnoDB存储引擎页为16K,即一个区1中一共有64个连续的页。


页Page

      是InnoDB存储引擎管理的最小单元,每个页的大小默认为16KB。为了保证页的连续性,InnoDB存储引擎每次从磁盘申请4-5个区,记录和索引等数据都是在页中存储。

      设置了之后不能再修改。除非通过mysqldump导入和导出操作来产生新的库

常见页的类型有:

  •  数据页(B-tree Node)
  • undo页(undo Log Page)
  •  系统页 (System Page)
  •  事物数据页 (Transaction System Page)
  • 插入缓冲位图页(Insert Buffer Bitmap)
  • 插入缓冲空闲列表页(Insert Buffer Free List)
  • 未压缩的二进制大对象页(Uncompressed BLOB Page)
  • 压缩的二进制大对象页 (compressed BLOB Page)


行row

       InnoDB存储引擎是面向列(row-oriented)的,也就是说数据是按行来进行存放的(数据表中的一行)。每个页存放的行记录也是有硬性定义的,最多允许存放16KB /2-200行的记录,即7992行记录。

        Trx_id:每次对某条记录进行改动时,都会把对应的事务id赋值给trx_id隐藏列
        Roll_pointer:每次对某条记录进行1改动时1,都会把旧的版本写入到undo日志中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息。

参考文献:

[1]:【总结】MySQL技术内幕四:InnoDB表的逻辑存储及实现 - 知乎 (zhihu.com)

你可能感兴趣的:(mysql,数据库)