如何UUID存储为多少?如何UUID存储为多少?(How to store uuid as numb

2019-05-17 11:51发布

基于问题的答案在MySQL UUID的表现 ,谁的答案建议存储UUID的数量,而不是作为一个字符串的人。 我不太确定它是如何完成的。 任何人都可以建议我什么事? 如何我Ruby代码处理呢?

Answer 1:

如果我理解正确的话,你用你的主列的UUID? 人们会说,一个普通(整数)主键会更快,但有使用MySQL的阴暗面另一种方式。 事实上,MySQL是更快,需要索引时,使用二进制比什么都重要。

由于UUID是128位,被写为十六进制的,它很容易加速和存储UUID。

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

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

现在是32个字符(如MD5哈希,这这也与工作)。

由于单个BINARY在MySQL的大小的8位, BINARY(16)是一个UUID(8×16 = 128)的大小。

你可以插入使用:

INSERT INTO Table (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个字符。



Answer 2:

该Percona的博客有回复你的问题的文章(包括基准): 存储UUID以优化的方式 。



Answer 3:

我不认为它是个好主意,用二进制。

比方说,你想查询某个值:

SELECT HEX(field_binary) AS field_binary FROM `test_table`

如果我们返回几个值,那么我们呼吁Hex函数几次。

然而,主要的问题是下一个:

SELECT * FROM `test_table`
    where field_binary=UNHEX('110E8400E29B11D4A716446655440000')

并使用其中一个内部功能,简单地忽略索引。

SELECT * FROM `test_table`
    where field_binary=x'skdsdfk5rtirfdcv@#*#(&#@$9' 

莫非会导致很多问题。



文章来源: How to store uuid as number?
标签: mysql uuid