2017-04-26 52 views
0

由于大型数据集上的大小和性能问题,我读过UUID通常不推荐作为主键。将UUID用作小型SQL表的主键

但是,在顶级组织表中使用它会有害吗?例如。 组织分支,哪里只有少数条目?

+0

你的意思是GUID的?总之,没有。但是,您可能需要在交易表中反映这一点。你也应该在你的数据库中保持一致。 PK的身份或GUID,不是混合。如果你有一个很好的GUID的理由 - 即记录必须是普遍唯一的,那么通过一切手段使用它。但如果你只是这样做,以避免正确建模你的数据,那么这是不好的设计实践。 –

+0

我不同意这个问题的前提。磁盘空间很便宜,作为主键,UUID应该具有良好的索引和性能。 – ceejayoz

+0

@ Nick.McDermaid UUID和GUID是一回事。 https://en.wikipedia.org/wiki/Universally_unique_identifier – ceejayoz

回答

1

我建议您使用serial而不是UUID。为什么整数优于UUID?

  • 它们占用的空间较小。这在基础表中是一个边际考虑因素,但对于外键来说是一个更大的问题。
  • 整数更容易阅读和记忆。

在许多数据库中,表格使用主键进行物理排序。在这样的数据库中,UUID上的新插入将几乎总是在“之间”记录之间,这很昂贵。但是,Postgres不支持聚簇索引,因此底层数据没有排序。

有不利之处整数:

  • 有一个有限的数量,虽然大整数几乎解决这个问题。
  • 它们编码插入顺序信息。其实,这可能是积极的或消极的。

除了空间使用情况,我不认为在静态表上使用UUID会有很大的伤害。我强烈喜欢整数,只有在整数很难计算的情况下才会使用UUID。

+0

@a_horse_with_no_name。 。 。谢谢。 –