我们正在考虑使用UUID值作为MySQL数据库的主键.插入的数据是从数十台、数百台甚至数千台远程计算机生成的,并且以每秒100-40000次的速度插入,我们永远不会进行任何更新.

在我们开始挑选数据之前,数据库本身通常会有大约5000万条记录,因此不是一个庞大的数据库,但也不是一个小数据库.我们还计划在InnoDB上运行,不过如果有更好的引擎,我们愿意改变这一点.

我们已经准备好使用Java的Type4UUID,但在测试中,我们看到了一些奇怪的行为.首先,我们将存储为varchar(36),我现在意识到使用二进制(16)会更好——尽管我不确定会有多好.

更大的问题是:当我们有5000万条记录时,这些随机数据对指数的影响有多严重?例如,如果我们使用类型1 UUID,其中最左边的位有时间戳,我们会更好吗?或者我们应该完全抛弃UUID并考虑自动增量主键?

我正在寻找关于不同类型UUID在MySQL中作为索引/主键存储时的性能的一般 idea /提示.谢谢

推荐答案

UUID是一个通用的唯一ID.这是您应该在这里考虑的通用部分.

你需要ID是唯一的吗?如果是这样,那么UUID可能是您唯一的 Select .

我强烈建议,如果你使用do个UUID,你可以将它们存储为一个数字,而不是字符串.如果您有5000万条以上的记录,那么存储空间的节省将提高您的性能(尽管我不能说会提高多少).

如果你的ID不需要是唯一的,那么我认为你不能比使用auto_increment做得更好,auto_increment可以保证ID在一个表中是唯一的(因为每次值都会递增)

Mysql相关问答推荐

正则表达式转换为MYSQL格式

慢查询日志(log)甚至包括快速查询,因为它包括等待锁定所花费的时间

如何计算超过特定数字的所有不同ID组,然后返回这些ID?

为分组记录MySQL取取值为TRUE的单行

如何为Oracle DB查询获得所需的GROUP BY结果?

Mysql根据文本语言或行数将列拆分为多列

在 MySQL 中使用非空条件 LAG() 函数

如何将结果列中的不同值按其他列sql中的值带入单行

MySQL 使用了错误的索引

如何创建将行转换为列的 MySQL 查询?

将 wordpress 自定义字段转换为单个数组

非常规字符的不正确字符串值错误

如何使用 Raw SQl / Laravel 进行累积计数 - Eloquent ORM

我在查询中没有得到正确的结果

插入重复键查询以在每一行上进行自定义更新

无法在两个 mysql 表上执行内部联接

减少mysql中的值但不是负数

#1146 - 表 'phpmyadmin.pma_recent' 不存在

WHERE 子句中的条件顺序会影响 MySQL 性能吗?

MySQL与空值比较