我们正在考虑使用 UUID 值作为 MySQL 数据库的主键。插入的数据是从数十、数百甚至数千台远程计算机生成的,并且以每秒 100-40,000 次插入的速度插入,我们永远不会进行任何更新。
在我们开始剔除数据之前,数据库本身通常会达到大约 50M 条记录,因此不是一个庞大的数据库,但也不是很小的。我们还计划在 InnoDB 上运行,但如果有更好的引擎来支持我们正在做的事情,我们愿意改变这一点。
我们已经准备好使用 Java 的 Type 4 UUID,但在测试中看到了一些奇怪的行为。一方面,我们存储为 varchar(36),我现在意识到使用 binary(16) 会更好——尽管我不确定会更好。
更大的问题是:当我们有 50M 条记录时,这些随机数据对索引的影响有多大?例如,如果我们使用最左边的位带有时间戳的类型 1 UUID,我们会更好吗?或者也许我们应该完全放弃 UUID 并考虑 auto_increment 主键?
我正在寻找关于不同类型 UUID 在 MySQL 中作为索引/主键存储时的性能的一般想法/提示。谢谢!