如何将uuid存储为数字?

根据问题的答案,即MySQL中的UUID性能,回答者建议将UUID存储为数字而不是字符串。我不太确定怎么做。有人能给我提点建议吗?我的ruby代码如何处理这个问题

如果我理解正确,您在主列中使用UUID?人们会说常规(整数)主键会更快,但有另一种方法使用MySQL的黑暗面。事实上,当需要索引时,MySQL使用二进制文件的速度比其他任何东西都快

由于UUID是128位的,并且是十六进制的,因此很容易加速和存储UUID

首先,在编程语言中删除破折号

110E8400-E29B-11D4-A716-446655440000110E8400E29B11D4A716446655440000

现在它是32个字符(就像MD5哈希一样,它也可以使用)

由于MySQL中单个BINARY的大小为8位,BINARY(16)是UUID的大小(8*16=128)

您可以使用以下命令插入:

插入表(FieldBin)值(UNHEX(“110E8400E29B11D4A716446655440000”)

并使用以下命令进行查询:

从表中选择十六进制(FieldBin)作为FieldBin

现在在编程语言中,在位置9、14、19和24处重新插入破折号,以匹配原始UUID。如果位置总是不同,您可以将该信息存储在第二个字段中

完整示例:

创建表格“测试表格”(
`字段_binary`二进制(16)空,
主键(`field\u binary`)
)引擎=INNODB;
插入“测试表”(
`二进制字段`
)
价值观(
UNHEX('110E8400E29B11D4A716446655440000')
);
从“测试”表中选择十六进制(字段二进制)作为字段二进制`

如果要对任何十六进制字符串使用此技术,请始终对字段长度执行length/2。因此,对于sha512,字段应为二进制(64),因为sha512编码长度为128个字符

发表评论