使用自增主键、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做主键将会添加到表上的其他索引中,因此会降低性能。

原文入口

一个小小后端的爬行痕迹
原文地址:https://www.cnblogs.com/heikedeblack/p/14281587.html