选择适合UUID作为主键的数据类型

4

先决条件为:

  1. 表中将有数十亿条数据。
  2. 表将拥有二级索引。
  3. 表的主键将是另一个表的外键。
  4. 表将具有大量数据(另一列可能是文本)。

主键必须是唯一的,因为我的数据库在多台机器之间进行复制,所以我选择UUID作为主键。

附注:空间也是一个问题,所以我认为Varchar(36)可能不是一个好的选择。


CHAR(36)与latin1列排序是MySQL在存储UUID时提供的最佳选项。 - Raymond Nijland
"主键必须是唯一的,因为我的数据库被复制到其他机器上,所以我选择了UUID。主键也会被复制到其他机器上。此外,一个无符号BIGINT可以容纳2^64-1个值,应该足够生成唯一的ID。" - Raymond Nijland
2
对于Postgres,使用uuid - user330315
2个回答

3

我同意使用BINARY(16)。相较于37字节,16字节更好。

但对于巨大的表来说,UUID是无望的低效率。(我假设你的十亿行表不适合内存)

我在http://mysql.rjweb.org/doc.php/uuid中讨论了这些问题以及更多问题。


1
我会选择BINARY(16)。如果你想使用CHAR,那么不带连字符的CHAR(32)已经足够大了,但BINARY更小更快。

2
使用 CHAR(32),请记得为该列使用 ASCII 编码。 - YektaDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接