mysql主键选择

news/2024/12/29 19:41:11/

mysql中用于唯一标识表中行数据的方式有哪些?项目中如何选择?你参与的项目中为什么选用这种方式?


 

自增ID

UUID

类型

整数型

字符串型

长度

固定长度(如MySQL InnoDB自动生成的ID为4字节,32位

32个字符(当前日期和时间、时钟序列、全局唯一的IEEE机器识别号)

唯一性

生成方式

数据库自动生成( 可以避免手动生成ID时出现错误,提高生成ID的准确性)

随机生成(当前时间、计数器和硬件标识等数据计算生成)

唯一标识范围

数据库记录级别

全球范围

插入速度

慢,数据会有碎片


 

查询速度

定位和寻址很快

顺序的每一条记录都存储在一条记录的后面。新插入的行一定会在原有的最大数据行下一行,mysql定位和寻址很快,不会为计算新行的位置而做出额外的消耗,减少了页分裂和碎片的产生
 

IO问题

写入是乱序的,innodb不得不频繁的做页分裂操作,以便为新的行分配空间,页分裂导致移动大量的数据,一次插入最少需要修改三个页以上,由于频繁的页分裂,页会变得稀疏并被不规则的填充,最终会导致数据会有碎片
 

性能问题


 

已经达到最大值,那么插入新数据时需要重新生成ID


 

随机生成的,所以会发生随机IO,影响插入速度,并且会造成硬盘的使用率较低


 

数据合并


 

数字类型,新老数据区分会出现一些冲突

新老数据合并,要是新数据主键也是数字类型,想新老数据区分会出现一些冲突
 

唯一性

适用场景

为了存储和查询效率选择

对于一些敏感数据,比如用户 id,订单 id 等,如果使用自增 id 作为主键的话,外部通过抓包,很容易可以知道新进用户量,成单量这些信息,所以需要谨慎考虑是否继续使用自增主键。
 

分布式系统

重复率


http://www.ppmy.cn/news/993124.html

相关文章

OC对象内存布局与isa指针

文章目录 一、Objective-C的本质二、一个objc对象如何进行内存布局?考虑父类的情况三、一个objc对象的isa指针指向什么?有什么作用四、objc对象的类方法和实例方法有什么本质区别和联系? 一、Objective-C的本质 Objc的底层实现是C\C代码&…

技术能力提升-《系统架构设计师教程》

在最近的月度读书会上,国林哥分享了下对《系统架构设计教程》的一点见解,在技术管理摸爬滚打了多年,觉得这个认证还是有一定价值,希望对有兴趣了解这门认证考试的朋友有所帮助,起到抛砖引玉的作用。 国林哥从以下四个方…

IO网络模型

文章目录 1、用户空间和内核态空间2、网络模型-阻塞IO3、网络模型-非阻塞IO4、网络模型-IO多路复用5、网络模型-信号驱动6、网络模型-异步IO7、对比 1、用户空间和内核态空间 服务器大多都采用Linux系统,例如: ubuntu和Centos 都是Linux的发行版,发行版…

爬虫小白-如何调试列表页链接与详情链接不一样并三种方式js逆向解决AES-ECB

目录 一、网站分析二、定位监听三、熟悉AES-ECB四、调试分析五、node运行js六、Python执行js 一、网站分析 三年前的案例,我的原始文章网站 ,如图我们直接点击标题进入到详情页,链接会发生跳转,且与我们在详情看到的链接&#xf…

前端面试题 —— Vue (三)

目录 一、v-model 可以被用在自定义组件上吗?如果可以,如何使用? 二、描述下Vue自定义指令 (1)自定义指令基本内容 (2)使用场景 (3)使用案例 三、Vue是如何收集依赖…

前端请求传输token到后端的两种方式

谈谈 cookie & session & jwt - 掘金 前端在每次请求时把token放在请求头中发送给后端,目前有两种方式: 一是通过cookie的形式,即把token放在cookie中,每次浏览器会自动帮我们带过去,不需要我们自己设置。 二…

美颜SDK开发指南:优化直播人像表现

在当今社交媒体和直播平台的流行趋势下,越来越多的用户渴望在直播中展现更加自信和美丽的一面。本文将探讨美颜SDK的开发指南,介绍其优化直播人像表现的重要性以及关键的技术要点。 一、用户为什么离不开美颜? 美颜SDK作为一种集成在直播应用…

php://filter绕过死亡exit

文章目录 php://filter绕过死亡exit前言[EIS 2019]EzPOP绕过exit 参考 php://filter绕过死亡exit 前言 最近写了一道反序列化的题,其中有一个需要通过php://filter去绕过死亡exit()的小trick,这里通过一道题目来讲解 [EIS 2019]EzPOP 题目源码&#…