【MySQL】mysql中不推荐使用uuid或者雪花id作为主键的原因以及差异化对比
文章目录
- 前言
- 什么是UUID?
- 什么是雪花ID?
- 什么是MySql自增ID?
- 优缺点对比
- UUID:
- 优点
- 1.全球唯一性
- 2.无需数据库支持
- 缺点
- 1.存储空间大
- 2.索引效率低
- 3.查询效率低
- 雪花ID:
- 优点
- 1.分布式环境下唯一性
- 缺点
- 1.依赖于机器时钟
- 2.存储空间较大
- 3.查询效率低
- MYSQL自增:
- 优点
- 1.简单易用
- 2.唯一性
- 3.效率高
- 4.索引效率高
- 缺点
- 1.不适用于分布式系统
- 2.不适用于需要保密的场景
- 3.查询效率低
- 应用场景
- UUID应用场景
- 1.分布式系统
- 2.高并发环境
- 3.需要保密的场景
- 雪花ID应用场景
- 1.分布式系统
- 2.高并发环境
- MySQL自增ID应用场景
- 1.单机系统
- 2.高效查询
- 3.索引效率高
- 总结
- 写在最后
前言
在数据库设计中,选择适当的主键类型对于数据的存储和查询效率至关重要。在MySQL中,有些开发者倾向于使用UUID(Universally Unique Identifier)或者雪花ID作为主键,以确保数据的唯一性。然而,这种做法并不总是推荐的,因为它们在性能、存储空间和索引效率等方面存在一些问题。本文将探讨在MySQL中不推荐使用UUID或者雪花ID作为主键的原因,并与其他主键类型进行差异化对比。
什么是UUID?
UUID(Universally Unique Identifier)是一种标识符,用于在计算机系统中唯一地标识实体。它是一个128位的数字,通常以32个十六进制数字的形式表示,中间用连字符分隔。UUID的生成算法保证了在理论上不同计算机和不同时间生成的UUID都是唯一的。
UUID的唯一性和广泛应用使得它在分布式系统、数据库、网络通信等领域得到广泛使用。它可以用于标识数据库记录、文件、消息、会话等各种实体,确保它们在不同的系统和时间下都能够被唯一标识。
什么是雪花ID?
雪花ID(Snowflake ID)是一种分布式唯一ID生成算法,由Twitter公司开发。它的设计目标是在分布式系统中生成全局唯一的ID,以解决传统自增ID在分布式环境下可能出现的冲突和性能瓶颈问题。
雪花ID的结构如下:
- 符号位(1位):始终为0,表示正数。
- 时间戳(41位):记录生成ID的时间戳,精确到毫秒级。
- 数据中心ID(5位):用于标识数据中心,最多支持32个数据中心。
- 机器ID(5位):用于标识机器,最多支持每个数据中心32台机器。
- 序列号(12位):每个节点在同一毫秒内生成的序列号,最多支持每毫秒生成4096个ID。
通过将时间戳、数据中心ID、机器ID和序列号组合在一起,雪花ID可以在分布式系统中生成全局唯一的ID。由于时间戳占据了较高的位数,所以雪花ID生成的ID是递增的,可以保证在一定程度上的有序性。
什么是MySql自增ID?
MySQL自增ID是一种由MySQL数据库管理系统提供的主键生成机制。它通过自动递增的方式为每条插入的记录生成一个唯一的ID值,用于标识该记录在表中的唯一性。
在MySQL中,自增ID通常与整数类型的列(如INT或BIGINT)结合使用。当插入一条新记录时,MySQL会自动为该列生成一个唯一的ID值,下一次插入时会自动递增。这样可以确保每条记录都有一个唯一的标识符,方便进行数据的查找、更新和删除操作。
优缺点对比
UUID:
优点
1.全球唯一性
UUID在全球范围内保证了唯一性,不会出现重复的情况。
2.无需数据库支持
UUID的生成不依赖于数据库,可以在应用层生成。
缺点
1.存储空间大
UUID占用的存储空间较大,通常为36个字符,如果作为主键,会占用更多的存储空间。
2.索引效率低
UUID是随机生成的,不具有顺序性,导致索引效率较低。
3.查询效率低
由于索引效率低,查询效率也会受到影响。
雪花ID:
优点
1.分布式环境下唯一性
雪花ID在分布式系统中生成唯一的ID,可以满足分布式环境下的需求。
缺点
1.依赖于机器时钟
雪花ID的生成依赖于机器的时钟,如果时钟回拨或者时钟不同步,可能会导致生成的ID不唯一。
2.存储空间较大
雪花ID占用的存储空间较大,通常为64位,如果作为主键,会占用更多的存储空间。
3.查询效率低
由于雪花ID是随机生成的,不具有顺序性,导致索引效率较低。
MYSQL自增:
优点
1.简单易用
MySQL自增ID的生成由数据库自动完成,无需额外的代码逻辑。
2.唯一性
自增ID保证了每条记录都有一个唯一的标识符。
3.效率高
自增ID是按顺序递增的,可以提高插入和查询的效率。
4.索引效率高
自增ID可以作为主键或索引列,提高查询效率。
缺点
1.不适用于分布式系统
在分布式环境下,多个节点生成的自增ID可能会冲突,需要额外的处理机制。
2.不适用于需要保密的场景
自增ID的递增规律可能暴露系统的使用情况,不适用于需要保密的业务场景。
3.查询效率低
由于雪花ID是随机生成的,不具有顺序性,导致索引效率较低。
综上所述,虽然UUID和雪花ID在某些场景下具有唯一性和分布式支持的优点,但由于存储空间大、索引效率低等缺点,以及不适用于分布式和保密场景,不推荐将它们作为主键。相比之下,MySQL自增ID具有简单易用、唯一性、效率高和索引效率高等优点,适用于大多数场景,因此推荐使用自增ID作为主键。
应用场景
UUID应用场景
1.分布式系统
由于UUID的全球唯一性,可以在分布式系统中生成唯一的标识符,避免冲突。
2.高并发环境
UUID的生成不依赖于数据库,可以在应用层生成,减少数据库的压力。
3.需要保密的场景
UUID是随机生成的,不具有递增规律,适用于需要保密的业务场景。
雪花ID应用场景
1.分布式系统
雪花ID可以在分布式系统中生成唯一的ID,满足分布式环境下的需求。
2.高并发环境
雪花ID的生成不依赖于数据库,可以在应用层生成,减少数据库的压力。
MySQL自增ID应用场景
1.单机系统
MySQL自增ID适用于单机系统,由数据库自动生成,简单易用。
2.高效查询
自增ID是按顺序递增的,可以提高插入和查询的效率。
3.索引效率高
自增ID可以作为主键或索引列,提高查询效率。
综上所述,UUID适用于分布式系统和需要保密的场景,雪花ID适用于分布式系统和高并发环境,MySQL自增ID适用于单机系统和高效查询的场景。根据具体的业务需求和系统架构,选择合适的主键类型。
总结
选择适当的主键类型对于数据库的性能和可扩展性至关重要。
在MySQL中,使用自增整数作为主键是一种常见的做法,因为它具有较小的存储空间、高效的索引和自动增长的特性。
相比之下,使用UUID或者雪花ID作为主键可能会导致性能下降、存储空间浪费和索引效率降低等问题。
然而,具体选择何种主键类型还是要根据具体的业务需求和数据特点来决定。
通过本文的介绍和对比,希望读者能够更好地理解在MySQL中不推荐使用UUID或者雪花ID作为主键的原因,并能够根据实际情况做出明智的选择。
写在最后
感谢您的支持和鼓励! 😊🙏
如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

相关文章:
【MySQL】mysql中不推荐使用uuid或者雪花id作为主键的原因以及差异化对比
文章目录 前言什么是UUID?什么是雪花ID?什么是MySql自增ID?优缺点对比UUID:优点1.全球唯一性2.无需数据库支持 缺点1.存储空间大2.索引效率低3.查询效率低 雪花ID:优点1.分布式环境下唯一性 缺点1.依赖于机器时钟2.存储空间较大3.查询效率低 MYSQL自增:优点1.简单…...
【Unity细节】Default clip could not be found in attached animations list.(动画机报错)
👨💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶🌫️收录于专栏:unity细节和bug 😶🌫️优质专栏 ⭐【…...
VsCode连接远程Linux编译环境的便捷处理
1.免输登录密码 免输命令的正确方法是使用公钥和私鈅在研发设备,和linux服务器上校验身份。公钥和私钥可在windows系统上生成。公钥要发送到linux服务器。私钥需要通知给本地的ssh客户端程序,相关的操作如下: 生成 SSH Key: 打开…...
【UE】用样条线实现测距功能(下)
目录 效果 步骤 一、实现多次测距功能 二、通过控件蓝图来进行测距 在上一篇(【UE】用样条线实现测距功能(上))文章基础上继续实现多次测距和清除功能。 效果 步骤 一、实现多次测距功能 打开蓝图“BP_Spline”,…...
矩阵知识补充
正交矩阵 定义: 正交矩阵是一种满足 A T A E A^{T}AE ATAE的方阵 正交矩阵具有以下几个重要性质: A的逆等于A的转置,即 A − 1 A T A^{-1}A^{T} A−1AT**A的行列式的绝对值等于1,即 ∣ d e t ( A ) ∣ 1 |det(A)|1 ∣det(A)∣…...
机器学习之数据清洗和预处理
目录 Box_Cox Box_Cox Box-Cox变换是一种用于数据预处理和清洗的方法,旨在使数据更符合统计模型的假设,特别是对于线性回归模型。这种变换通过调整数据的尺度和形状,使其更加正态分布。 Box-Cox变换的定义是: y ( λ ) { y λ − 1 λ , i…...
【SpringBoot系列】SpringBoot日志配置
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
庖丁解牛:NIO核心概念与机制详解 06 _ 连网和异步 I/O
文章目录 Pre概述异步 I/OSelectors打开一个 ServerSocketChannel选择键内部循环监听新连接接受新的连接删除处理过的 SelectionKey传入的 I/O回到主循环 Pre 庖丁解牛:NIO核心概念与机制详解 01 庖丁解牛:NIO核心概念与机制详解 02 _ 缓冲区的细节实现…...
域控操作五:统一熄屏睡眠时间
直接看图路径,我只设置了熄屏,如果要睡眠就下面那个启用设置时间...
2023APMCM亚太杯数学建模选题建议及初步思路
大家好呀,亚太杯数学建模开始了,来说一下初步的选题建议吧: 首先定下主基调,本次亚太杯推荐选择B题。 C题如果想做好,搜集数据难度并不低,并且模型比较简单,此外目前选择的人数过多,…...
ORA-28003: password verification for the specified password failed,取消oracl密码复杂度
自己在测试环境想要使自己的Oracle数据库用户使用简单的密码方便测试,结果指定密码的密码验证失败 SQL> alter user zzw identified by zzw; alter user zzw identified by zzw * ERROR at line 1: ORA-28003: password verification for the specified password…...
【DevOps】Git 图文详解(九):工作中的 Git 实践
本系列包含: Git 图文详解(一):简介及基础概念Git 图文详解(二):Git 安装及配置Git 图文详解(三):常用的 Git GUIGit 图文详解(四)&a…...
外贸自建站服务器怎么选?网站搭建的工具?
外贸自建站服务器用哪个好?如何选海洋建站的服务器? 外贸自建站是企业拓展海外市场的重要手段之一。而在这个过程中,选择一个适合的服务器对于网站的稳定运行和优化至关重要。海洋建站将为您介绍如何选择适合的外贸自建站服务器。 外贸自建…...
010 OpenCV中的4种平滑滤波
目录 一、环境 二、平滑滤波 2.1、均值滤波 2.2、高斯滤波 2.3、中值滤波 2.4、双边滤波 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、平滑滤波 2.1、均值滤波 在OpenCV库中,blur函数是一种简…...
Oracle-客户端连接报错ORA-12545问题
问题背景: 用户在客户端服务器通过sqlplus通过scan ip登陆访问数据库时,偶尔会出现连接报错ORA-12545: Connect failed because target host or object does not exist的情况。 问题分析: 首先,登陆到连接有问题的客户端数据库上,…...
Linux中的进程程序替换
Linux中的进程程序替换 1. 替换原理2. 替换函数3. 函数解释4. 命名理解程序替换的意义 1. 替换原理 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的…...
MIT6.824-Raft笔记:脑裂、Majority Vote(过半投票/过半选举)
本部分主要是问题引入,以及给出一个解决方案 1 脑裂(Split Brain) replication system的共同点:单点 前面几个容错特性(fault-tolerant)的系统,有一个共同的特点。 MapReduce复制了计算&…...
vuex中的常用属性有哪些?
在 Vuex 中,有一些常用的属性可以帮助你管理应用程序的状态。这些属性包括 state、getters、mutations 和 actions。 state: 用于存储应用程序的状态数据,是 Vuex 存储数据的地方。当应用程序中的多个组件需要共享状态时,就可以将这些共享的状…...
oracle面试相关的,Oracle基本操作的SQL命令
文章目录 数据库-Oracle〇、Oracle用户管理一、Oracle数据库操作二、Oracle表操作1、创建表2、删除表3、重命名表4、增加字段5、修改字段6、重名字段7、删除字段8、添加主键9、删除主键10、创建索引11、删除索引12、创建视图13、删除视图 三、Oracle操作数据1、数据查询2、插入…...
Ubuntu 23.10 服务器版本 ifconfig 查不到网卡 ip(已解决)
文章目录 1、问题描述2、 解决方案 1、问题描述 服务器:ubuntu 23.10 经常会遇到虚拟机添加仅主机网卡后,通过 ifconfig 无法获取其网卡 ip 2、 解决方案 修改网卡配置文件: # 进入网卡配置文件目录 cd /etc/netplan # 备份原始文件 cp …...
Phi-mini-MoE-instruct轻量级MoE模型快速部署教程:3步完成Ubuntu环境搭建
Phi-mini-MoE-instruct轻量级MoE模型快速部署教程:3步完成Ubuntu环境搭建 1. 开篇:为什么选择Phi-mini-MoE-instruct 如果你正在寻找一个既轻量又强大的语言模型,Phi-mini-MoE-instruct绝对值得一试。这个基于混合专家(MoE)架构的模型&…...
lvgl实现图标还原
隐藏很简单,在设计lvgl初始界面的时候添加事件即可,但是还原需要改代码本次修改需要在event事件那个文件进行修改,首先找到点击后隐藏的那个模块static void screen_1_click_img_event_handler (lv_event_t *e)click_img是我起的名字…...
NVIDIA Nemotron 3架构解析:智能体AI与混合Mamba-Transformer MoE设计
1. NVIDIA Nemotron 3架构解析:面向智能体AI的新一代模型设计在当今AI领域,智能体系统(Agentic AI)正变得越来越复杂。这类系统通常由多个协作的智能体组成——包括检索器、规划器、工具执行器和验证器等——它们需要在大量上下文…...
超强Python指南python-guide:Web自动化与浏览器控制终极教程
超强Python指南python-guide:Web自动化与浏览器控制终极教程 【免费下载链接】python-guide Python best practices guidebook, written for humans. 项目地址: https://gitcode.com/gh_mirrors/py/python-guide GitHub 加速计划的 py/python-guide 是一份面…...
通用深度学习模型在超声多器官分割与分类中的突破
1. 通用深度学习模型在超声多器官分割与分类中的突破在临床超声诊断中,医生使用同一台超声设备配合不同探头就能检查从甲状腺、乳腺到肝脏、胎儿等全身器官。然而当前超声AI却呈现出"一个模型对应单一器官/任务"的碎片化格局,这与临床实际工作…...
3大实战指南:G-Helper华硕笔记本性能优化深度解析
3大实战指南:G-Helper华硕笔记本性能优化深度解析 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, …...
深度学习核心技术解析:从神经网络到AI应用实践
1. 深度学习:从神经网络到人工智能革命2006年,多伦多大学教授Geoffrey Hinton在《Science》杂志上发表了一篇关于深度信念网络的论文,这个看似普通的学术事件却意外点燃了人工智能的第三次浪潮。当时很少有人能预料到,这个被称为&…...
OpenCore Legacy Patcher终极指南:3步让老旧Mac重获新生
OpenCore Legacy Patcher终极指南:3步让老旧Mac重获新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否拥有一台被苹果官方"抛弃&quo…...
小红书数据采集技术解决方案:基于Appium与Mitmproxy的混合架构实现
小红书数据采集技术解决方案:基于Appium与Mitmproxy的混合架构实现 【免费下载链接】XiaohongshuSpider 小红书爬取 项目地址: https://gitcode.com/gh_mirrors/xia/XiaohongshuSpider 在小红书这类拥有复杂反爬机制的社交内容平台中,数据采集面临…...
PyCaret集成学习实战:从原理到高效模型构建
1. 用PyCaret构建高效集成模型的完整指南在机器学习实践中,我们常常面临一个困境:单个模型的表现总存在局限性。你可能遇到过这样的场景——精心调参的模型在训练集上表现优异,却在测试集上频频失误;或者不同模型在不同数据分布下…...
