mysql – 如何存储uuid作为数字?

根据问题的答案,UUID performance in MySQL,回答的人建议将UUID存储为数字,而不是字符串。我不太确定如何做。任何人都可以向我提出建议?我的ruby代码如何处理?
如果我理解正确,您在主列中使用UUID?人们会说,一个常规(整数)主键将更快,但有另一种方式使用MySQL的黑暗面。事实上,当需要索引时,MySQL比任何其他的都更快。

由于UUID是128位并且以十六进制写入,因此可以非常容易地加速和存储UUID。

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

从110E8400-E29B-11D4-A716-446655440000到110E8400E29B11D4A716446655440000。

现在它是32个字符(像一个MD5哈希,这也适用于)。

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

您可以使用:

INSERT INTO表(FieldBin)VALUES(UNHEX(“110E8400E29B11D4A716446655440000”))

和查询使用:

SELECT HEX(FieldBin)AS FieldBin FROM Table

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

完整示例:

CREATE TABLE  `test_table` (
    `field_binary` BINARY( 16 ) NULL ,
    PRIMARY KEY (  `field_binary` )
) ENGINE = INNODB ;

INSERT INTO  `test_table` (
    `field_binary`
)
VALUES (
    UNHEX(  '110E8400E29B11D4A716446655440000' )
);

SELECT HEX(field_binary) AS field_binary FROM `test_table`

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

http://stackoverflow.com/questions/10950202/how-to-store-uuid-as-number

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:mysql – 如何存储uuid作为数字?