最佳答案
我们正在考虑使用 UUID 值作为 MySQL 数据库的主键。插入的数据来自数十台、数百台甚至数千台远程计算机,插入速度为每秒100-40,000次,我们永远不会做任何更新。
在我们开始筛选数据之前,数据库本身通常会达到大约5000万条记录,所以不是一个大型数据库,但也不小。我们还计划在 InnoDB 上运行,不过如果有更好的引擎,我们愿意改变这一点。
我们已经准备好使用 Java 的 Type4UUID,但是在测试中发现了一些奇怪的行为。首先,我们以 varchar (36)的形式存储,我现在意识到我们最好使用二进制(16)——尽管我不确定这样会好到什么程度。
更大的问题是: 当我们拥有5000万条记录时,这些随机数据会把索引搞得多糟糕?例如,如果我们使用类型1的 UUID,其中最左边的位是时间戳,我们是否会更好?或者也许我们应该完全抛弃 UUID,考虑 auto _ 增量主 key?
我正在寻找有关不同类型 UUID 在 MySQL 中作为索引/主键存储时的性能的一般性想法/提示。谢谢!