截至 2018 年,在 Postgres 中使用 bigint 而不是 int 作为主键是否有任何性能差异?

As of 2018, is there any performance difference by using bigint instead of int as a primary key in Postgres?

我想在我的许多 table 中使用随机主键(用户 table、帖子 table 等...),就像 [=10] 的设计一样=](查看 url 或 api 中的文章 ID,它是一个 12 个随机十六进制字符字符串,很可能对应于一个 64 位整数),通过这种设计,我获得了更大的收益space 而且它的设计也比使用串行主密钥来抵制自动请求更安全一些,获取有关网站的信息,如总帖子或总用户或抓取

由于如今存储差异并不那么重要,是否会有重大的性能差异,尤其是对于获取查询,还是在 2018 年非常微不足道,尤其是如果 Postgres 托管在 RDS 之类的东西上?

是否存在任何性能差异?是的。串行密钥为 4 个字节,而您的密钥为 8 个字节。那是更多 space,因此需要更多工作。

有区别吗?可能不会。一些数据库会按主键对数据进行聚类(即排序)。 Postgres 不会那样做。这种集群是一个问题,因为它会立即导致随机生成的密钥碎片化。

对于您提议的密钥结构,您似乎有一个很好的用例。虽然我没有看到 a priori 问题,但您可能想要测试差异以查看它是否对您的应用程序很重要。