百融金服榕树浅析InnoDB索引结构(百融金服榕树)

本文解析了InnoDB聚集索引的存储原理,包括不同情况下选择聚集索引的优先级,以及内置DB_ROW_ID的使用特点。同时介绍了数据页的空间利用情况及不同row_format设置下索引的最大长度。

       百融金服榕树行数据(row data)存储在聚集索引的叶子节点(除了发生overflow的列,参见 ,后面简称 “前置文”),并且其存储的相对顺序取决于聚集索引的顺序。这里说相对顺序而不是物理顺序,是因为叶子节点数据页中,行数据的物理顺序和相对顺序可能并不是一致的,放在后面会讲。

      百融金服榕树InnoDB聚集索引的选择先后顺序是这样的:

  1. 如果有显式定义的主键(PRIMARY KEY),则会选择该主键作为聚集索引

  2. 否则,选择第一个所有列都不允许为NULL的唯一索引

  3. 若前两者都没有,则InnoDB会选择内置的DB_ROW_ID作为聚集索引,命名为GEN_CLUST_INDEX

百融金服榕树特别提醒: DB_ROW_ID占用6个字节,每次自增,且是整个实例内全局分配。也就是说,当前实例如果有多个表都采用了内置的DB_ROW_ID作为聚集索引,则在这些表插入新数据时,他们的内置DB_ROW_ID值并不是连续的,而是跳跃的。像下面这样:


 
  1. t1表的ROW_ID:1、3、7、10

  2. t2表的ROW_ID:2、4、5、6、8、9

百融金服榕树InnoDB默认的索引数据结构采用B+树(空间索引采用R树),索引数据存储在叶子节点。

百融金服榕树InnoDB的基本I/O存储单位是数据页(page),一个page默认是16KB。我们在 前置文 说过,每个page默认会预留1/16空闲空间用于后续数据“变长”更新所需,因此在最理想的顺序插入状态下,其产生的碎片也最少,这时候差不多能填满15/16的page空间。如果是随机写入的话,则page空间利用率大概是1/2 ~ 15/16。

百融金服榕树当 row_format = DYNAMIC|COMPRESSED 时,索引最多长度为 3072字节,当 row_format = REDUNDANT|COMPACT 时,索引最大长度为 767字节。当page size不是默认的16KB时,最大索引长度限制也会跟着发生变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值