加油站: 在数字经济时代,数据的重要性堪比石油。大数据的四个特点:Volume(数据体量大)、Variety(数据类型繁多)、Velocity(处理速度快)、Value(商业价值高),只要合理利用数据并对其进行准确的分析,将会给企业带来很高的价值回报。

前言:

部分企业使用mysql数据库新建表时选择自增主键id,但其实当长期使用时会造成一定的问题,比如: 单点故障,自增上限,数据迁移等一系列问题.

下面分析下数据库的自增主键和UUID的优缺点,在使用过程中,大家根据业务场景选择适合的主键生成方式.

正文:

一.自增主键

介绍:    

自增ID是在设计表时将id字段的值设置为自增的形式,这样当插入一行数据时无需指定id会自动根据前一字段的ID值+1进行填充。在MySQL数据库中,可通过sql语句AUTO_INCREMENT来对特定的字段启用自增赋值 使用自增ID作为主键,能够保证字段的原子性.

优点:

  1. 数据库自动编号,速度快,而且是增量增长,按顺序存放,对于检索非常有利;

  2. 数字型,占用空间小,易排序,在程序中传递也方便;

  3. 如果通过非系统增加记录时,可以不用指定该字段,不用担心主键重复问题。

缺点:

  1. 因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其它系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的)。特别是在新系统上线时,新旧系统并行存在,并且是异库异构的数据库的情况下,需要双向同步时,自增主键将是你的噩梦;

  2. 在系统集成或割接时,如果新旧系统主键不同是数字型就会导致修改主键数据类型,这也会导致其它有外键关联的表的修改,后果同样很严重;

  3. 若系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个字符标识(例如“o”,old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。

一.UUID

介绍:    

UUID含义是通用唯一识别码 (Universally Unique Identifier),指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。换句话说能够在一定的范围内保证主键id的唯一性。

优点:

  1. 出现数据拆分、合并存储的时候,能达到全局的唯一性.

缺点:

  1. 影响插入速度, 并且造成硬盘使用率低.

  2. uuid之间比较大小相对数字慢不少, 影响查询速度.

  3. uuid占空间大, 如果你建的索引越多, 影响越严重.

总结:

    至于使用UUID还是自增ID主要还是看项目是否足够庞大数据量是否足够多。从使用方便性上来说自增ID使用简单,不需要额外支持,而UUID相对麻烦一些,涉及到UUID算法的选取、程序的嵌入等等。而从应对庞大系统的效果上来说,UUID就比自增ID显得优秀得多。怎么选择就是看自己的实际情况,按需选择。

本篇文章到此结束,有问题请留言一起讨论,精彩持续进行中...

您所喜欢,点个在看 

mysql 主键自增_还再使用数据库自增主键吗?相关推荐

  1. 新增一个主键自增长_为什么InnoDB宜用自增主键

    前言 领导:既然自增数字主键会导致主备同步时主键冲突,自增主键能不能砍掉? 答:自增主键主要是技术上提升效率,键冲突可以考虑备库插入时不指定主键值,或者binlog改成row模式,而且, 公司规范:如 ...

  2. mysql分库分表风险_别再问“分库分表”了,再问就崩溃了!

    在谈论数据库架构和数据库优化的时候,我们经常会听到分库分表,分库分表其实涉及到很多难题,今天我们来汇总一下数据库分库分表解决方案. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数 ...

  3. python数据库的增删改查_Python|实现数据库的增删改查

    Python|实现数据库的增删改查 2020-10-05 1 前言最近在学flask网页制作,需要用到数据库相关知识,在经过初步学习后实现了用python来实现数据库的相关操作,即增删改查.2 前提条 ...

  4. mysql即是主键又是外键怎么写_请问 sql 字段 可不可以 即是主键又是外键

    展开全部 可以,这说明这两张表的主键相关联,只是那张是主表(就是32313133353236313431303231363533e58685e5aeb931333433656133该表的主键作为从表的 ...

  5. oracle增加字段为主键自增_在 Oracle 中设置自增列

    如果你经常使用 MySQL,你肯定对 AUTO_INCREMENT 非常熟悉,因为经常要用到它. 一.什么是自增列 ? 自增列是数据库中值随插入的每个行自动增加的一列.它最常用于主键或 ID 字段,这 ...

  6. docker mysql镜像连接不上_还在手动安装应用?试一下Docker

    Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完 ...

  7. linux mysql 自动加斜杠_【实战演练】Linux操作系统19-Mysql主主复制加Keepalived高可用...

    理论部分,在之前的文章已经说明过了,详见: 繁星亮与鲍包包:[理论研究]业务系统高可用及负载均衡​zhuanlan.zhihu.com 上一篇已经讲述对2台Mysql服务器做主主复制,实现Mysql数 ...

  8. Mysql存储函数实现增删改查_使用存储过程操作数据库(实现增删改查)

    使用存储过程操作数据库 添加数据: --创建一个存储过程,向表中插入一条数据 create proc usp_insertintoTbClass @className nvarchar(50), @c ...

  9. repositoryitemlookupedit根据每行的id绑定数据_一种根据数据库自增ID生成唯一ID的解决方案...

    在我们的开发过程中,经常会遇到ID生成的问题,那么这里就介绍一种解决方案,注意这里只适合混淆ID规则,也就是说生成的ID没有任何规则,不适用于订单ID. 一般有序自增主键的ID,极易被爬虫抓取数据,作 ...

最新文章

  1. Domain adaptation:连接机器学习(Machine Learning)与迁移学习(Transfer Learning)
  2. IOS-C语言小练习02
  3. 机器人驾驶的神经网络愿景(下)
  4. Facebook 开源:PyTorchVideo!
  5. 输入挂(bzoj 2901: 矩阵求和)
  6. FPGA中case语句4选1数据选择器
  7. 中文字符集编码unicode,gb2312,cp936,GBK,GB18030介绍
  8. 人人有用的零基础理财入门课(水湄物语)
  9. 计算机主板清理,终于理解如何清洗电脑主板
  10. WARNING: disk usage in log directory [/home/.../.ros/log] is over 1GB. 问题解决办法
  11. “.NET研究”专访微软MVP衣明志:走进ASP.NET MVC 2框架开发
  12. java.lang.ClassNotFoundException: org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEnd
  13. python读写、创建文件、文件夹
  14. Swift5.1 语言指南(三) 快速之旅
  15. 在移动端页面进行调试
  16. 字段属性——唯一约束
  17. 天空卫士迎风破浪,捷报三传
  18. iOS实现浮动泡泡功能,悬浮泡泡,windows系统屏幕保护程序的气泡功能(碰撞检测)
  19. java比较复数是否相等_通过重载运算符“= =”,实现判断两个复数是否相等的运算(若相等返回1,否则返回0)。重载前置“++”运算符,使虚部和实部分别加1。...
  20. 浅析多卡多链路聚合路由器的关键技术、原理

热门文章

  1. 解决VMware虚拟机网络时长中断的问题
  2. 【报告分享】2021微信视频号生态洞察报告.pdf(附下载链接)
  3. 【白皮书分享】2020年度薪酬白皮书.pdf(附下载链接)
  4. 推荐系统中稀疏特征 Embedding 的优化表示方法
  5. 【报告分享】巨量引擎2019娱乐算数白皮书.pdf(附下载链接)
  6. 倒计时6天|2020腾讯广告犀牛鸟计划申请即将截止,错过再等一年!
  7. 吴恩达深度学习神经网络基础编程作业Logistic Regression with a Neural Network mindset
  8. LeetCode刷题(32)
  9. linux脚本程序是什么意思,什么是shell脚本编程?
  10. html提值到php 冒泡,如何实现Html事件冒泡