[MySQL]为什么MySQL不推荐使用uuid作为主键

笔者之前的公司在设计表时,公司设计表优先使用UUID作为主键,当初讲这个的好处是因为可以方便迁移数据,但是了解了MySQL中索引的结构后我们发现,主键尽量能使用递增时还是选择递增。(特别在大数据量情况下不建议使用uuid)

B+Tree数据结构决定了

[MySQL]为什么MySQL不推荐使用uuid作为主键_第1张图片
我们发现,使用递增作为主键时,叶子节点的数据是天然有序的!如果此时插入的数据是93,94,95…时,数据只需要继续往后跟即可;若插入的数据是11,12这种数据时,为保证连续性,就需要将数据左右“挪一下”,也就是页的分裂和合并”。

int和varchar的大小问题

int的大小为4byte,如果使用bigint时为8byte,而varchar的大小为32byte
对于MySQL来说,默认每次从磁盘向内存中加载的数据默认为16KB,如果使用空间更大的varchar会导致每次读取数据个数较少,间接导致了IO性能下降即影响了我们的查询速度。

大数据量情况下若使用分布式架构时主键该怎么办

上面讲到,我们在大数据量情况下不建议使用UUID作为主键,但是分布式环境下我们要保证主键的唯一性怎么办?这里不得不提到另外一个东西:分布式主键(常见的实现是雪花算法)。
在保证唯一的前提下,雪花算法也保障了数据的连续。

你可能感兴趣的:(MySQL,数据结构)