mysql数据库使用32位的uuid作为主键与使用int自增作为主键

在MySQL中设计表时,官方建议使用自增主键ID,而不是UUID或雪花ID。
本文将讨论为什么不建议使用UUID,并将分析使用UUID的数据库性能问题。
本博客将使用控制变量的方法创建多个表(user_auto_key、user_uuid、random_user_key)并测试它们的插入速度和查询速度。
这些表仅主键生成策略不同,其他字段保持不变。
我们将使用Spring的jdbcTemplate进行额外的检查测试。
通过技术框架(Springboot+jdbcTemplate+junit+hutool),在相同环境下写入相同量的数据,并分析输入效率。
该程序使用随机生成的数据,包括姓名、电子邮件、地址等。
脚本的输出将显示user_key_auto、user_random_key和user_uuid表的插入状态。
同时,通过10W数据输入测试,当数据量在100W左右时,UUID输入效率垫底。
使用UUID的内部索引结构和自增ID的区别在于每次插入UUID的位置并不固定,导致写入目标页内存不足或者需要频繁的页面分配。
添加额外的操作和数据移动,从而降低效率。
内部采用自增ID结构进行顺序填充,最大化页面填充率,减少页面分裂和碎片,提高性能。
但自增长ID也存在潜在的问题,如业务增长信息泄漏、高并发负载下的锁争用、自增长锁的性能损失等。
最重要的是,尽管自增ID有缺点,但在当前的开发中,建议遵循MySQL官方建议并使用自增主键ID。
MySQL内部机制复杂,有很大的优化空间。
进一步的发展需要深刻的理解。
本博客提供了实验代码和结果分析,供参考。
更多相关技术内容和实用代码请参考附件链接。
关注Java编程宇宙,获取更多Java学习资源。

用雪花id和uuid做MySQL主键,被领导怼了

选择MySQL主键:SnowflakeID和UUID注意事项

在设计MySQL表结构时,官方不建议使用UUID或SnowflakeID(NumberIDfulllongunorderedandunique)作为主键,而是更喜欢使用auto-increment不断增加ID。
那么为什么不推荐UUID呢?本文将对其背后的原理进行深入分析。

本文将通过案例分析讨论以下内容:使用uuidID索引结构与自增的实际性能测试结果对比、使用自增的内部ID结构及其优缺点

1实际测试和示例

我们创建了三个表:user_auto_key、user_uuid、user_random_key,通过分别使用auto-add、UUID和随机ID作为主键,保持其他字段不变,以比较输入和查询速度。
通过Spring的jdbcTemplate进行增删测试,随机生成数据,保证公平性。

2、索引结构和性能对比

1、自增ID:它的调整可以让InnoDB高效存储,插入新行时几乎没有额外消耗,减少分区和页面碎片。
但自增ID也存在安全和性能问题,例如业务增长信息暴露、争用锁争用等。

2UUID和SnowflakeID:由于混乱,会出现频繁的IO和页面共享,影响插表优化页面填充的速度,增加维护成本。

总结

虽然UUID和雪花ID在某些场景下有其唯一性,但大多数情况下,MySQL官方推荐的自增ID是基于其稳定性和效率。
在实际开发中,必须根据项目需求和性能要求来权衡使用哪种关键策略。
同时需要了解MySQL的复杂性,不断优化表结构。

为什么MySQL不建议使用自增idmysql不建自增id

为什么MySQL不推荐使用自增id?MySQL是常用的关系型数据库,开发中经常会涉及到数据表的设计和使用。
一般来说,我们将为每个表添加一个自增ID作为主键,以区分每条数据。
然而,MySQL不建议总是使用自动递增的id作为主键。
1.实际开发中数据表的复制合并。
有时,如果您需要合并或复制两个表。
如果两个表都有自动插入ID。
数据表可能无法正常运行。
所以,MySQL建议使用全局唯一标识符(例如UUID或GUID)作为键以避免此类冲突。
2.分布式系统在分布式系统中,每个节点可以有自己的自动安装ID;因此,当数据合并时,相同的自动插入ID会导致数据出现差异。
所以,在分布式系统中使用自增ID作为主键并不是一个好的选择。
反而,为了避免此问题,请使用全局标识符作为主键。
3.作为主键使用自动递增的ID容易受到攻击。
攻击者就是图表;系统自带的输入ID可以用来推断时间戳等信息中的数据总量。
如果该信息危及系统安全;不建议使用自增ID。
相反,使用UUID或GUID更安全,因为它是主密钥。
我们来对比一下使用自增id和使用UUID或GUID作为主键的性能和可读性。
当前表中最大的自动将id加1。
使用UUID或GUID需要执行耗时的步骤才能确保生成的ID是全局唯一的。
因此,如果系统具有高性能的话。
需要做出权衡和选择。
2、可读性使用自增id作为主键,可读性更好,可以轻松看出表中数据的增长情况。
相反,UUID或GUID生成的主键可读性较差,难以快速查询表。
综上所述,MySQL不建议在所有情况下都使用自增ID作为主键。
设计数据表时;你根据实际情况来。
您需要做出选择并选择最适合您当前系统要求的关键方法。
一般来说,在全球范围内,唯一的识别系统更加安全;它比灵活的、自增的ID有优势。