我是少侠露飞。学习塑造人生,技术改变世界。
引言
我在之前一篇博客专门介绍了MySQL聚簇索引和非聚簇索引,附传送门:
【享学MySQL】系列:MySQL索引的数据结构,索引种类及聚簇索引和非聚簇索引
简单来说,就是我们设计表的时候,基本都会人为设定一个主键,这就是聚簇索引(如果没有设定主键,MySQL会选择非空不唯一的字段作为聚簇索引,如果依然没有,则MySQL会选择自己隐藏列row_id作为聚簇索引)。
MySQL主键分为自增主键和UUID两种形式。今天我们就针对这个主键的生成深入探究一下。
自增主键和UUID比较
首先需要明确一点,自增主键是整数,UUID是字符串类型(一般为36位)。
所以UUID相比自增主键一个首要的缺点就是UUID主键索引占据空间更大。
其次我们再来分别来看看两种主键生成方式插入数据时发生的情况。
自增主键的插入:
如上图所示,InnoDB把每条记录都保存在前一条记录的后面,因为主键的值是顺序的。当达到页面最大的填充因子(Fill Factor)(InnoDB初始的填充因子是15/16),后一条记录就会写入新页面。
UUID主键的插入