【发布时间】:2012-06-08 13:54:06
【问题描述】:
根据问题的答案UUID performance in MySQL,回答者建议将 UUID 存储为数字而不是字符串。我不太确定如何做到这一点。任何人都可以给我一些建议吗?我的 ruby 代码如何处理这个问题?
【问题讨论】:
-
只有在使用 UUID 作为主键时才会出现性能问题,因为 UUID 不是非常有效的主键。为什么需要 UUID?您能否保留 UUID 并仅使用自动增量作为主键?
-
@ThomSmith Re "UUID 不是非常有效的主键".. 是否愿意引用一个解释原因的来源?
-
数据比较大,一般需要比较多的指令来比较。它不是顺序的,所以索引的开销只是有点高。而且,当然,如果您将其存储为字符串而不是 128 位数字,就像 OP 似乎正在做的那样,情况会变得更糟。这不是一个糟糕的密钥,但除非有一些外部原因,否则我不会使用它。
-
自动增量可能会导致多个共享数据库服务器出现问题 - 通常会导致密钥冲突。 UUID 旨在解决此类问题。如果您不是将 UUID 存储为文本,而是存储为 bin(16),那么您当然有一个数字 UUID。比较二进制比比较文本要快。这是一个讨论这个的网站 - mysql.rjweb.org/doc.php/uuid