处理大(UUID)作为一个MySQL表的主键的最佳方法(Best way to handle lar

2019-08-31 15:44发布

我有,我想为我的MySQL表的主键使用UUID字符串,则UUID是(后“ - ”字符被剥去)32个字符的十六进制字符串。 由于这样的事实,这是更好地使用数字列(INT)为数据库中的主键,我想这个转换为整数,但不能肯定的来处理它的最佳方式。

  1. 由于字符串(即UUID =“a822ff2bff02461db45ddcd10a2de0c2”)的尺寸,我需要分成多“子”这一点。
  2. 我目前运行在32位架构PHP所以将其转换内PHP将无法正常工作,由于PHP_INT_MAX尺寸(最大为0xFFFFFFFF)。 我怀疑这将是对MySQL同样的限制。
  3. 我不喜欢多个主键的主意,因为这一个解决方法,我宁愿用一个字符串表示,尽管这不是首选的方法。

我可能会考虑这一切都错了,我不反对读文件,所以无论例子或建议阅读的反应是可以接受的。

Answer 1:

在大多数情况下,最好的UUID / GUID的存储为BINARY(16) 看到这些相关的StackOverflow问题:

  • 在MySQL UUID性能
  • 如何存储的UUID号

转换可以(也许应该)在MySQL,而不是PHP所以无论您使用的是32位PHP客户端或64位没关系位(双关语意:P)完成



Answer 2:

使用字符串类型,而不是一个整数。 更好的是,只有当它解决问题的更好。

如果你真的关心查找速度,使用合成(自动递增)主键。 你可以把在UUID列的唯一约束,并用它只有一次查找其随后用于您的加入等合成关键



Answer 3:

这取决于存储引擎也。 TokuDB应该处理这些问题。



文章来源: Best way to handle large (UUID) as a MySQL table primary key