使用UUID作为小型SQL表的主键

使用UUID作为小型SQL表的主键,sql,node.js,postgresql,Sql,Node.js,Postgresql,我已经了解到,由于大型数据集的大小和性能问题,通常不建议将UUID作为主键 然而,在一些顶级组织表上使用它是否有害?例如,组织或分支机构,其中只有少数条目?我建议您使用串行而不是UUID。为什么整数比uuid更可取 它们占用的空间更少。这在基表中是一个次要的考虑因素,但对于外键来说是一个更大的问题 整数更容易阅读和记忆 在许多数据库中,表是使用主键进行物理排序的。在这样的数据库中,UUID上的新插入几乎总是在记录之间进行,这是非常昂贵的。但是,Postgres不支持聚集索引,因此基础数据没有

我已经了解到,由于大型数据集的大小和性能问题,通常不建议将UUID作为主键


然而,在一些顶级组织表上使用它是否有害?例如,组织或分支机构,其中只有少数条目?

我建议您使用
串行
而不是UUID。为什么整数比uuid更可取

  • 它们占用的空间更少。这在基表中是一个次要的考虑因素,但对于外键来说是一个更大的问题
  • 整数更容易阅读和记忆
在许多数据库中,表是使用主键进行物理排序的。在这样的数据库中,UUID上的新插入几乎总是在记录之间进行,这是非常昂贵的。但是,Postgres不支持聚集索引,因此基础数据没有排序

整数有缺点:

  • 有一个有限的数字,虽然大整数可以解决这个问题
  • 它们对插入信息的顺序进行编码。实际上,这可以是积极的,也可以是消极的

除了空间使用之外,我认为在静态表上使用UUID没有多大危害。我非常喜欢整数,只在整数难以计算的情况下才使用UUID。

你是说GUID吗?简而言之,不是。但是您可能需要在事务表中反映这一点。你也应该在数据库中保持一致。PK是标识或GUID,而不是混合。如果你有一个很好的理由使用GUID,即记录必须是唯一的,那么一定要使用它。但是如果你这样做只是为了避免正确地建模你的数据,那么这是糟糕的设计实践。我不同意这个问题的前提。磁盘空间很便宜,作为主键,UUID应该有很好的索引和性能。@Nick.McDermaid UUID和GUID是一样的。哎呀,我错过了这是我所知甚少的Postgres。我们没有发现任何使用GUI的问题。看看这个算法。我用大约4米的行进行了测试;看起来还可以。对于小数据集,如果您注意到一个差异,我会感到惊讶。@a_horse_没有名字。非常感谢。