为什么不推荐使用UUID作为MySQL主键?面试官提问总结

面试MySQL

1个回答

写回答

美岳

2026-01-06 02:35

+ 关注

公司
公司

大家都知道它的缺点,比如不稠密、容易产生页裂。但它的优点又是什么?在权衡优缺点时,我们该如何取舍?首先来看优点:1. 冲突概率极低;2. 对于数据库的合并和拆分非常友好;3. 在存储上仅占用16个字节(注意,并非37字节或32字节),这个开销其实并非完全不可接受。那么,这种不稠密的特性是否真的对系统的性能和空间造成了严重影响,以至于我们必须放弃它的所有优点?如果为了追求性能提升而改用自增ID,进而导致数据迁移带来的一系列复杂问题,这样的成本是否值得付出?实际上,随着SSD读写速度动辄达到5GB/s,页裂带来的性能损耗相较于HDD时代已经有了质的下降。也就是说,页裂的影响可能并没有想象中那么严重。然而,我见过很多系统设计中采用了一种看似合理但实际上矛盾的做法:将主键设置为自增ID以满足稠密的要求,但实际上并不使用这个ID(因为它没有实际意义)。与此同时,还会额外添加一列UUID,并为UUID建立索引,仍然依靠UUID进行查询。这难道不是一种掩耳盗铃、自欺欺人的做法吗?仅仅因为UUID不是主键,这个问题就会消失吗?综合来看,目前常用的解决方案有以下几种:1. 雪花ID,其主流实现的有效期一般为70年。很多人认为70年后公司早就不存在了,数据也失去了价值。但在新时代背景下,这种观点未必成立。2. 如果你认为雪花ID可以解决页裂问题,那么我们也可以考虑一种改进版的UUID(前64位表示时间戳,其余部分随机生成),从而确保整体有序性。请问面试官,如果我提出这种雪花版UUID的设计方案,您会怎么看?

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号