在 Mysql 中, 主键应该使用自增还是 uuid ?

数据库主键到底是用自增长好还是UUID好 各位同学好,今天给大家讲一下MySQL数据库在设计主键时,应该使用哪种数据类型。我们知道,咱们在设计数据库时,主键是必须设置的。一般情况下,咱们都会选择使用主键自增或者UUID这两种主键策略。那么这两个哪种更好呢?我们应该使用哪一种呢,今天就请大家跟老徐来一起来学习一下吧。 阅读详情

在 Mysql 中 ,常见用于主键有数据有两种 。第一种是使用 MySQL 的自增主键 ,第二种则是使用业务字段 ,例如身份证或者 uuid 这样的无序信息 。

那么这两种 id 哪一种比较好 ,我们在新建一张表的时候该怎么考虑主键的使用 ,今天就来好好的研究一下 。

首先给出结论 ,在大部分情况下我们都推荐使用自增 id 作为主键,至于原因 ,那就要从 MySQL 的索引结构开始说起 。

以最常见的 InnoDB 为例 , 在 InnoDB 中 ,索引是以 B+ 树结构进行存储的 。我们每次在往数据表中插入字段时 ,MySQL 就会自动的维护主键索引 ,向索引 B+ 树中插入我们新增的数据 。

如果我们使用的是无序的业务数据的话 ,也就意味着我们需要经常往索引的中间加数据 ,需要对大量的数据进行移动处理 ,从而空出新的索引需要的位置 。这就会影响插入的效率 。在最糟糕的情况下 ,我们需要向一个已经满了的数据页中插入我们的索引数据 ,这就需要申请一个新的数据页 ,再将部分数据放到新数据页中 ,这个过程被称之为页分裂 。而且除了性能问题外 ,页分裂也会导致页的空间利用率降低 。

这时候我们再来看使用自增索引的情况 ,当我们使用自增索引的时候 ,所有的新增数据都是有序的 ,新的索引只需要追加在索引的尾端即可 ,快速便捷 ,上面提到的问题就都没有了 。

当我们使用自增主键的时候 ,我们在业务上可以不再操心主键的赋值和重复等问题 ,系统会自动获取当前 id 的最大值加一来作为新纪录的主键 。而且大部分情况下 ,自增主键使用整形的话只需要 4 个字节 ,使用业务数据或者 uuid 所占据的空间则会大得多 。

所以除非业务有特殊需要, 例如为了防止业务量通过 id 暴露这样的情况 ,在大部分情况下 ,我们使用自增主键会好很多 。

为什么MySQL官方不推荐使用uuid而是推荐连续自增的主键id作为主键? 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处? 为了研究这个问题,我们先来建三张表。 分别是user_auto_key,user_uuid,user_random_key,分别表示自动增长的主键,uuid作为主键,随机key作为主键,其它我们完全保持不变. 根据控制变量法,我们只把每个表的主键使用不同的策略 阅读详情

相关推荐

【文本分析学习】Anaconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码) NLTK

文本分析学习之 Anadconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码)

littlexmj的博客 2332

MySql 主键一般用自增ID还是UUID

14、主键一般用自增ID还是UUID? (1)自增ID: 使用自增ID的好处: 字段长度较 UUID 会小很多。 数据库自动编号,按顺序存放,利于检索 无需担心主键重复问题 使用自增ID的缺点: 因为是自增,在某些业务场景下,容易被其他人查到业务量。 发生数据迁移时,或者表合并时会非常麻烦 在高并发的场景下,竞争自增锁会降低数据库的吞吐能力 (2)UUID:通用唯一标识码,UUID是基于当前时间、计数器和硬件标识等数据计算生成的。 使用UUID的优点: 唯一标识,不用考虑重复问题,在数据拆分

书香水墨 5246

VHDL按键消抖(状态机版本)

检测下降沿:设置一个和,分别代表之前的之前和之前的信号状态,若两个信号key_in_d2=1,key_in_d1=0,他俩的not key_in_d2 and key_in_d1为1,则说明下降沿产生,把它设置为标志位key_flag。延时计数:50MHz的板子每次计数需要20ns,而抖动时间大约为5-10ms。所以取7ms,作为延时时间。可以看见当检测到下降沿时,开始计数计数计满再次检测,若为低电平则为按下按键,否则为抖动。通过检测下降沿来临,延时计数再次检测,如果为低电平则为按键按下。

qq_69639216的博客 1084

mysql一主键uuid和自增的选择

MySQL主键

weixin_70280523的博客 4608

深入解析mSATA与mini-PCIE接口的硬件设计要点

本文深入解析mSATA与mini-PCIE接口的硬件设计要点,涵盖信号定义、电源设计、高速信号处理及PCB布局布线等关键内容。通过实战案例和调试技巧,帮助工程师规避常见设计陷阱,提升电路设计效率,特别适合工业控制和嵌入式系统开发场景。

weixin_28741413的博客 317

告别混乱代码!在Arduino IDE中管理多文件项目的5个必备技巧

本文分享了在Arduino IDE中管理多文件项目的5个必备技巧,帮助开发者告别混乱代码。通过代码分割和模块化设计,提升编译效率、降低内存占用,并实现功能解耦。重点介绍了头文件设计、CPP文件实现、调试技巧和工业级目录结构,让你的Arduino项目像乐高积木一样清晰易维护。

fun88的博客 361

MySQL主键:自增ID与UUID的选择

在设计数据库表时,选择合适的主键类型是一个重要的决策。MySQL中,主键的选择通常在自增ID和UUID之间进行权衡。本文将探讨这两种主键类型的优缺点,以及在不同场景下的适用性。

My_wife_QBL的博客 1125

千兆以太网PHY设计:PCB原理图完整示例

深入解析千兆以太网PHY电路设计要点,提供完整的PCB原理图设计实例,帮助工程师掌握高速信号布局与电源去耦等关键技术,提升设计稳定性与信号完整性。

weixin_30633869的博客 630

MySQL-使用自增ID主键与UUID主键的优劣比较

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 从单实例和分布式架构两种部署方式下来说明。 (1)单实例或者单节点组 通过对500W、1000W的单机表进行测试,自增ID主键性能高于UUID,磁盘存储费用比UUID节省一半的钱。所以在单实例上或者单节点组上,使用自增ID作为首选主键。 (2)分布式架构场景 从节点组的规模划分如下: 20个节点组以下的小型规模的分布式场景,为了实现快速部署,可以采用

了解➔熟悉➔掌握➔精通 1313

保姆级教程:在Android车机上从零配置USB Gadget,搞定CarPlay有线连接

本文详细介绍了在Android车机上从零配置USB Gadget以实现CarPlay有线连接的完整实践指南。涵盖内核驱动开发、Android系统配置及用户空间通信架构,帮助开发者深入理解USB子系统和iAP2协议栈,实现稳定可靠的CarPlay有线连接功能。

weixin_30621711的博客 472

EMB电子机械制动系统和EHB电子液压制动系统控制功能的对比

EMB电子机械制动系统相比EHB液压制动系统具有显著优势:响应速度更快(<100ms)、控制精度更高(±2N·m)、能实现单轮独立控制,支持0.1%级制动力调节。在ABS、ESC等安全功能上表现更优,制动平顺性和NVH性能更好,同时提升能量回收效率15%-20%。特别适合智能驾驶需求,可使AEB等系统响应时间缩短50ms,紧急制动距离减少1米以上。EMB系统完美契合高阶自动驾驶对快速响应和精准控制的要求。

m0_59012156的博客 885

uuid和自增_为什么MySQL不推荐使用uuid或者雪花id作为主键?

注:本文讨论范围限于两者都适用的前提下,为什么优先推荐使用连续自增的主键id,uuid或者雪花id有其不可替代的场景,暂不做讨论前言在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?本篇博客我们就来分析...

weixin_39710951的博客 709

AutoSAR系列讲解(实践篇)9.5-通信的数据映射

讲解了AppL中的数据与通信中的Signal的一个映射操作

雪云飞星的博客 1万+

MySQL 使用自增ID主键和UUID 作为主键的区别

MySQL 使用自增ID主键和UUID 作为主键的区别http://www.360java.com/mysql/8421.html 转载于:https://blog.51cto.com/damaog/1881145

weixin_33878457的博客 583

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MySQL使用自增ID主键和UUID作为主键的优劣

目录一、准备表&数据二、500w级数据测试2.1 录入500W数据,自增ID节省一半磁盘空间2.2 单个数据走索引查询,自增id和uuid相差不大2.3 范围like查询,自增ID性能优于UUID2.4 写入测试,自增ID是UUID的4倍2.5、备份和恢复,自增ID性能优于UUID500W总结1000W总结自增ID主键+步长,适合中等规模的分布式场景UUID,适合小规模的分布式环境 一、准备表&数据 UC_USER,自增ID为主键,表结构类似如下: CREATE TABLE `UC_USER

qq_30108237的博客 2937

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

uuid和自增_深入分析mysql为什么不推荐使用uuid或者雪花id作为主键

Java面试笔试面经、Java技术每天学习一点作者:Yrion来源:https://www.cnblogs.com/wyq178/p/12548864.html前言在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟...

weixin_32638607的博客 322

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)

一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿实际的案例来说服他,所以准备做一个详细的测试。 作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试。 测试过程是目前我想到的多方位的常用的几种类型的sql进行测试,当然可能不太完善,欢迎大家留言提出更加完善的测试方案或者测试sql语...

LWT_博客 1454

MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程

【转载】一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了说服他,所以准备做一个详细的测试。 作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试。 大概环境是:Centos6.5、MySQL5.6.1...

Jenny512的博客 1305

Mysql使用UUID和自增主键ID性能对比测试

 测试缘由  一个开发同事做了一个框架,里面主键是uuid,我跟他建议说MySQL不要用uuid用自增主键,自增主键效率高,他说不一定...

゛Never give up~ 1万+

MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(500W单表)

MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(500W单表)

hfdgjjg的博客 1896

MySQL 使用自增ID(int)主键和UUID(varchar)作为主键的优劣比较

总结 (1)单实例或者单节点组: 经过500W、1000W的单机表测试,自增ID相对UUID来说,自增ID主键性能高于UUID,磁盘存储费用比UUID节省一半的钱。所以在单实例上或者单节点组上,使用自增ID作为首选主键。 (2)分布式架构场景: 20个节点组下的小型规模的分布式场景,为了快速实现部署,可以采用多花存储费用、牺牲部分性能而使用UUID主键快速部署; 20到200个节点组的中...

HeatDeath的博客 2万+

Mysql 使用UUID和自增主键ID性能对比测试

测试缘由  一个开发同事做了一个框架,里面主键是uuid,我跟他建议说MySQL不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿实际的案例来说服他,所以准备做一个详细的测试。  作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试。          测试过程

琪琪的博客 7870

如何设置MySQL 分布式架构主键ID,为什么不能使用自增ID和UUID做主键,使用雪花算法有什么优缺点?

如何设置MySQL 分布式架构主键ID,为什么不能使用自增ID和UUID做主键,使用雪花算法有什么优缺点?

weixin_42501031的博客 588

雪花算法生成的主键存在哪些问题,为什么不能使用自增ID或者UUID做MySQL的主键

特性自增IDUUID雪花算法唯一性单机唯一全局唯一全局唯一有序性严格有序完全无序时间有序存储空间4-8字节16字节8字节分布式支持不支持支持支持生成方式数据库生成应用生成应用生成性能影响自增锁瓶颈索引分裂时钟依赖适用场景单机MySQL简单分布式系统高并发分布式系统推荐选择• 单机系统:自增ID• 简单分布式系统:MySQL 8.0的有序UUID• 高并发分布式系统:雪花算法或其改进版(如Leaf)

qq_74156239的博客 1008
上一篇: java 调用 CXF 报错 java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL
六等星痕
博客等级 码龄9年 1粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值