UUID 或 BIGSERIAL 外键 Postgres

civ*_*v15 4 postgresql primary-key uuid

我有 8 个使用 UUID 主键的表,其中 7 个使用 UUID 外键。使用 BIGSERIAL 而不是 UUID 对性能会更好吗?

Erw*_*ter 6

uuid如果需要,请使用它。
如果不这样做,请不要使用它。

bigint以多种方式更小,速度更快。8 与 16 字节听起来并不多,但对于大表和多个实例,差异会累积起来。(并且很少会uuidbigint对小桌子有意义。)

bigint在人眼和人类处理以及在数字毕竟没有变得那么大的情况下,通常也更容易。UUID 总是需要 32 个字符的表示(可选加破折号)。

如果在同一个表中有两个(PK 和 FK),则行将增长 16 个字节。这对于窄行可能会有所不同,或者对于宽行可以忽略不计。更重要的是,关联索引的大小也在增长。虽然 a 的 PK 索引bigint每行占用 16 个字节(包括 8 字节索引元组开销),但uuid. 如果 RAM 不可用,这可能意味着驻留在 RAM 中的多个索引与被逐出并从存储中反复读回的差异。这将是一个巨大的差异。

你还需要bigint吗?通常,一个 4 字节integer就足够了(如果它真的足够好的话)......

有关的: