mysql innodb存储引擎学习 (2)

本文详细介绍了InnoDB存储引擎的内部结构,包括索引组织表、逻辑存储结构(表空间、段、区、页)、行格式以及行溢出数据。此外,还探讨了InnoDB的页结构、索引分类(聚集索引与辅助索引)以及索引管理。文章还讨论了B+树的分裂策略、索引覆盖、多范围读优化和索引条件推下等索引优化技术。最后,讲解了InnoDB的锁机制(锁的类型、一致性读取方式、锁升级)和事务特性(原子性、一致性、隔离性和持久性),以及事务的实现方式(redo log和undo log)。
摘要由CSDN通过智能技术生成

接上:https://blog.csdn.net/qq_32250495/article/details/99099152

四、表
4.1 索引组织表。在innoDB中,表都是按照主键顺序组织存放的,这种存储方式的表称为索引组织表。innoDB会按照如下方式选择或创建主键:
    首先判断表中是否有非空的唯一索引,如果有则为主键。如果没有则innnoDB自动创建一个6字节大小的指针。

4.2 innoDB逻辑存储结构
    从逻辑上来看,innodb所有的数据都被逻辑的放在一个空间中,称为表空间。表空间又由段、区、页组成。
    表空间:innodb有一个共享的表空间ibdata1,如果配置一下参数,可以使每张表都有一个表空间,用于存放数据、索引和插入缓冲的bitmap页,其他数据,如果回滚段、插入缓冲索引、系统事务、二次写缓冲依然在共享表空间中。
    段:表空间由段组成,常见的段有数据段,索引段,回滚段。由于innoDB的表示索引组织的,所以数据就是B+树所以的叶子节点,索引就是B+树的非叶子节点。
    区:区是由连续页组成的空间。每个区大小为1MB,为了保证区的连续性,innoDB一次从磁盘申请4-5个区。默认情况下innoDB存储引擎页的大小为16KB,即一个区由64个连续的页。innoDB段在初始分配的时候只有32个碎片页,只有在超过该大小后才连续分配。
    页:页是innoDB磁盘管理的最小单位。
    行:页中按照行存放数据,每个页最多存储7992行记录。

4.3 行格式
    在老的版本中使用称为 antelope(Compact, Redundent)的文件格式,在新版本开始使用barracuda(Compressed,Dynamic)的文件格式
    Compact行记录格式:变长字段长度列表(1-2字节),null标志位(1字节),记录头信息(5字节),事务ID列,回滚指针列,列数据。回滚指针列记录了undo log中的数据。页中所有行都通过链表串联起来。
    Redundent行记录格式:变长字段长度列表。记录头信息(6字节),列1,列2... 该格式是数据库5.0之前的版本格式。

    新的记录格式对于blob数据完全采用行溢出的方式。数据页中只存放20个字节的指针。Compressed格式会压缩blob页。

4.4 行溢出数据
    根据行格式定义可知,一行记录可以创建65535字节大小。但是数据页为16K,无法存储这么大的数据,当数据发生行溢出时候,数据存放在blob页中。而真正的数据页只保存了768字节的前缀数据,之后是偏移量,指向行溢出页。
    innoDB存储引擎表是按照B+树组织的,所以每页数据中至少包含2条记录。如果页中足够存放两条数据,则不会存放到blob页中。

4.5 页结构
    数据页可由7个部分组成。
    File Header。 文件头用来记录页的一些头信息。占用38个字节。checksum(4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值