使用自增主键、UUID的优缺点

摘要:
保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。使用UUID后,URL显得冗长,不够友好。没有内置的函数获取最新产生的UUID主键。UUID做主键将会添加到表上的其他索引中,因此会降低性能。

自增主键

这种方式是使用数据库提供的自增数值型字段作为自增主键,它的优点是:

  1. 数据库自动编号,速度快,而且是增量增长,按顺序存放,对于检索非常有利;
  2. 数字型,占用空间小,易排序,在程序中传递也方便;
  3. 能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
  4. 保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。

缺点 :

  1. 因为自动增长,在手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其它系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突(前提是老系统也是数字型的)。特别是在新系统上线时,新旧系统并行存在,并且是异库异构的数据库的情况下,需要双向同步时,自增主键将是你的噩梦;
  2. 在系统集成或交接时,如果新旧系统主键不同是数字型就会导致修改主键数据类型,这也会导致其它有外键关联的表的修改,后果同样很严重;
  3. 若系统也是数字型的,在导入时,为了区分新老数据,可能想在老数据主键前统一加一个字符标识(例如“o”,old)来表示这是老数据,那么自动增长的数字型又面临一个挑战。
  4. 如果经常有合并表的操作,就可能会出现主键重复的情况
  5. 很难处理分布式存储的数据表。数据量特别大时,会导致查询数据库操作变慢。此时需要进行数据库的水平拆分,划分到不同的数据库中,那么当添加数据时,每个表都会自增长,导致主键冲突。

UUID

优点:

  1. 能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
  2. 保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。

缺点:

    1. 比较占地方,和INT类型相比,存储一个UUID要花费更多的空间。
    2. 使用UUID后,URL显得冗长,不够友好。
    3. 没有内置的函数获取最新产生的UUID主键。
    4. 很难记忆。Join操作性能比int要低。
    5. UUID做主键将会添加到表上的其他索引中,因此会降低性能。

原文入口

免责声明:文章转载自《使用自增主键、UUID的优缺点》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇电赛菜鸟营培训(一)——STM32F103CB之LED控制Caffeine批量加载浅析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

命令行方式登录PostgreSQL

目录:   一、在默认配置条件下,本机访问PostgreSQL   二、创建新用户来访问PostgreSQL   三、最简单的做法   四、开启远程访问 一、在默认配置条件下,本机访问PostgreSQL 切换到Linux用户postgres,然后执行psql: $ su - postgres Last login: Wed Mar 1 13:16:48...

oracle 数据库下所有表结构、数据量及缺失值统计

查用户表 select * from all_tab_comments --查询所有用户的表,视图等。 select * from all_col_comments --查询所有用户的表的列名和注释。 select * from all_tab_columns --查询所有用户的表的列名等信息。 select * from user_tab...

Entity Framework 6 自定义连接字符串ConnectionString连接MySQL

  在开始介绍之前,首先来看看官方对Entity Framework的解释:Entity Framework (EF) is an object-relational mapper that enables .NET developers to work with relational data using domain-specific objects....

springboot 和 mongdb连接问题 Exception in thread "main" com.mongodb.MongoSecurityException:

1 Exception in thread "main" com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='user', source='userdb', password=<hid...

Oracle 归档日志管理

一、Oracle日志介绍 1、Oracle日志分类分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和redo log 重做日志(记录数据库的更改)。本文主要关注Oracle的重做日志。重做日志分为在线重做日志和归档重做日志。online Redo log files--在线重做日志,又称联机重做日志...

pentaho之kettle篇---kettle基本操作

今天先来做一个简单的kettle的例子。 打开输入,选择CSV文件输入。 双击CSV文件输入图标,可以看见如下: 步骤名称:就是你这一步的名字,可以任意取,原则就是要明白,清楚这一步是做了什么操作。 文件名:是你要选取的这个.CSV结尾的文件的名称。 列分隔符:每个CSV文件都是有一定的规则的,要么是分号是分隔符,要么是逗号是分隔符等等。 包含列头行:...