我们正在考虑将UUID值用作MySQL数据库的主键。所插入的数据是从数十台,数百台甚至数千台远程计算机生成的,并且以每秒100-40,000次插入的速度插入,我们将永远不会进行任何更新。
在我们开始选择数据之前,数据库本身通常会获得大约5000万条记录,因此不是庞大的数据库,但也不小。我们也计划在InnoDB上运行,但是如果我们有更好的引擎来进行我们的工作,我们愿意改变它。
我们已经准备好使用Java的Type 4 UUID,但是在测试中已经看到了一些奇怪的行为。首先,我们将其存储为varchar(36),我现在意识到使用Binary(16)会更好- 尽管我不确定有多少更好。
更大的问题是:当我们有50M条记录时,此随机数据对索引的破坏有多严重?如果我们使用例如类型1的UUID标记最左边的比特,会更好吗?还是我们应该完全放弃UUID并考虑使用auto_increment主键?
当将不同类型的UUID作为索引/主键存储在MySQL中时,我正在寻找有关不同类型的UUID的性能的一般想法/提示。谢谢!
UUID是通用唯一ID。这是您应该在此处考虑的普遍部分。
您 真的 需要ID通用吗?如果是这样,那么UUID可能是您唯一的选择。
我强烈建议如果您 确实 使用UUID,请将它们存储为数字而不是字符串。如果您有50M +记录,那么节省存储空间将提高您的性能(尽管我不能说多少)。
如果您的ID并不需要是唯一的,那么我认为仅使用auto_increment可以做得更好,这可以确保ID在表中是唯一的(因为值每次都会递增)