Mysql GUID的好解决方案是什么?

Mysql GUID的好解决方案是什么?,mysql,ruby,ruby-on-rails-3,mongodb,Mysql,Ruby,Ruby On Rails 3,Mongodb,目前,我有一个1300万行的数据库,我们使用uuid作为主键。每次我们进行数据库迁移时,完成一个表需要几个小时。查询性能似乎也很差 在谷歌搜索和阅读一些博客后,他们建议将uuid转换为二进制(16),但转换后的值不可读,使用起来非常困难。在我的Ruby代码中也很难使用它 除了uuid,MySQL中是否还有其他解决方案可以获得全局唯一标识 mysql> select UNHEX(REPLACE('A4E7890F-A188-4663-89EB-176D94DF6774','-',''));

目前,我有一个1300万行的数据库,我们使用
uuid
作为主键。每次我们进行数据库迁移时,完成一个表需要几个小时。查询性能似乎也很差

在谷歌搜索和阅读一些博客后,他们建议将uuid转换为二进制(16),但转换后的值不可读,使用起来非常困难。在我的Ruby代码中也很难使用它

除了
uuid
,MySQL中是否还有其他解决方案可以获得全局唯一标识

mysql> select UNHEX(REPLACE('A4E7890F-A188-4663-89EB-176D94DF6774','-',''));
+---------------------------------------------------------------+
| UNHEX(REPLACE('A4E7890F-A188-4663-89EB-176D94DF6774','-','')) |
+---------------------------------------------------------------+
| ���Fc��m��gt                                                       |
我检查过了,mongodb还有
ObjectId
,只有12个字节。可以在MySQL服务器中使用它吗?我怎样才能利用它在MySQL中使用呢?

答案 您必须针对您的应用程序进行测试,但对于非常大的数据集,如果您:

  • 使用列作为主键,因为MySQL为此进行了优化
  • 为UUID列编制索引,以便在不进行完整表扫描的情况下进行快速查找
  • 比较冗长的UUID不可能像整数键那样有效,因此即使您仍然大量使用UUID列,您也应该通过这种方式获得性能提升。不过,没有什么可以替代自己进行基准测试

    相关问题

    答案 您必须针对您的应用程序进行测试,但对于非常大的数据集,如果您:

  • 使用列作为主键,因为MySQL为此进行了优化
  • 为UUID列编制索引,以便在不进行完整表扫描的情况下进行快速查找
  • 比较冗长的UUID不可能像整数键那样有效,因此即使您仍然大量使用UUID列,您也应该通过这种方式获得性能提升。不过,没有什么可以替代自己进行基准测试

    相关问题

    我建议先把你的大桌子分成几个小桌子。这将有助于迁移,但代码复杂度很低。它是一个用于200个门户的数据库,该表适用于这些门户。如果我拆分,我将拆分为200个数据库。这意味着我需要做很多维护工作。为什么需要200个数据库?您可以将它们分组并创建(比如)10-20个表(数据库),每个表属于所有表。如果需要拆分,请将它们全部拆分在一起,好吗?是的,但迁移运行得更快。而且您可以始终保持拆分(并将数据移动到另一台机器)。弄乱数据格式的效果要小得多。我建议先把你的大表分成几个小表。这将有助于迁移,但代码复杂度很低。它是一个用于200个门户的数据库,该表适用于这些门户。如果我拆分,我将拆分为200个数据库。这意味着我需要做很多维护工作。为什么需要200个数据库?您可以将它们分组并创建(比如)10-20个表(数据库),每个表属于所有表。如果需要拆分,请将它们全部拆分在一起,好吗?是的,但迁移运行得更快。而且您可以始终保持拆分(并将数据移动到另一台机器)。弄乱数据格式的影响要小得多。是他的迁移速度慢,而不是查询。@SergioTulentsev OP说“查询性能似乎也很差。”如果您有更好的答案,请随时提供;我肯定会投票选出比我的建议更能解决问题的方案。对不起,我的错。我的答案(在评论中)是:“拆分表格,获得更多的机器”。但我犹豫是否将其作为答案发布是他的迁移速度慢,而不是查询速度慢。@SergioTulentsev OP说“查询性能似乎也很差。”如果您有更好的答案,请随时提供;我肯定会投票选出比我的建议更能解决问题的方案。对不起,我的错。我的答案(在评论中)是:“拆分表格,获得更多的机器”。但我犹豫是否将其作为答案发布