雪花算法生成id对MySQL影响_自增长id/UUID/雪花算法的深层次分析比较

本文探讨了MySQL Innodb存储结构中,顺序主键与随机主键(如雪花算法、UUID、自增ID)对效率的影响。分析表明,顺序主键在插入和查询时更优,尤其是在B+树索引下。UUID和自增ID在性能上有不同表现,UUID占用空间大,查询排序速度慢;自增ID虽节省空间,但在大量数据时可能导致主键页填充问题。大型项目中,UUID因跨库合并的便利性更受青睐。
摘要由CSDN通过智能技术生成

说到id之前,先说一下mysql数据库的Innodb的主键索引,因为这和索引息息相关。

我们知道,在Innodb中,采用的是B+数索引。Innodb的存储结构,是聚簇索引。对于聚簇索引,

(1)顺序主键和随机主键的对效率的影响很大。我们分插入和查询来讲:

插入。在磁盘中,有一个页的概念,而一页的容量是固定的,每一页按顺序存储数据,一般数据量达到一页的15/16,则开始存到下一页。但如果主键是随机的,那么每次插入之前,为了找到它的位置,首先需要进行一次比较,找到它的合适位置,再进行插入。如果是在页尾,那自然是最理想的效果。

UUID和自增长在程序中怎么实现此处不讲,我们直接从性能和实际使用来分析。

说到性能,就不等不提到索引,此处以InnoDB的BTree索引来讲。

uuid类型是varchar(36),而自增长Id则一般是bigInt类型。

首先,大家要知道,id作为唯一索引,并不总是能提高效率。对于非常小的表,大部分情况下简单的全表扫描效率更高,对于中大型的表,索引才非常有效。因为索引帮助存储快速查找到记录的同时,也会带来额外的消耗。

那么索引会带来哪些额外的消耗呢?空间和时间。

下面做了一个实验,在一个有足够内存容纳索引的服务器上插入100万条记录和300百万条记录,时间和空间上的消耗如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值