数据库主键到底是用自增长好还是UUID好

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

一. 主键自增

  1. 使用自增长做主键的优点

  • 很小的数据存储空间;

  • 性能最好;

  • 容易记忆。

  1. 使用自增长做主键的缺点

  • 如果存在大量的数据,可能会超出自增长的取值范围;

  • 很难(并不是不能)处理分布式存储的数据表,尤其是需要合并表的情况下;

  • 安全性低,因为是有规律的,容易被非法获取数据。

二. UUID

  1. 使用UUID做主键的优点

  • 它是独一无二的,出现重复的机会少;

  • 适合大量数据中的插入和更新操作,尤其是在高并发和分布式环境下;

  • 跨服务器数据合并非常方便;

  • 安全性较高。

  1. 使用UUID做主键的缺点

  • 存储空间大(16 byte),因此它将会占用更多的磁盘空间;

  • 会降低性能;

  • 很难记忆。

三. 使用选择

那么一般情况下,对于以上两种主键策略,我们该如何选择呢?

一般情况下,MySQL推荐我们使用自增ID。这是因为在MySQL的 InnoDB 存储引擎中,主键索引是聚簇索引,主键索引的B+树叶子节点会按照顺序存储主键的值及数据。如果主键索引是自增ID,只需要按顺序往后排列即可;如果是UUID,ID是随机生成的,所以在数据插入时会造成大量的数据移动,产生大量的内存碎片,造成插入性能的下降。

如果我们要结合具体的项目,又该选择哪种注解策略呢?此时要分如下几种情况:

  • 项目是单机版的,并且数据量比较大(百万级)时,用自增长的,此时最好能考虑下安全性,做些安全措施。

  • 项目是单机版的,并且数据量没那么大,对速度和存储要求不高时,用UUID。

  • 项目是分布式的,那么首选UUID,分布式一般对速度和存储要求不高。

  • 项目是分布式的,并且数据量达到千万级别可更高时,对速度和存储有要求时,可以用自增长。

现在你知道在MySQL中,该如何选择主键策略了吗?关注小千,干货天天都不断!

当然如果各位觉得以上的内容不过瘾,还想详细了解MySQL相关技术知识,观看MySQL专业全面的技术课程,免费的哦!

MySQL数据库教程,mysql安装到mysql高级一套通关

猜你喜欢

转载自blog.csdn.net/GUDUzhongliang/article/details/132096849