如果我理解正确的话,您在主列中使用 UUID 吗?人们会说常规(整数)主键会更快,但还有另一种方法使用 MySQL 的黑暗面。事实上,当需要索引时,MySQL 使用二进制比其他任何方法都更快。
由于UUID是128位并且以十六进制写入,因此很容易加速和存储UUID。
首先,在您的编程语言中删除破折号
From 110E8400-E29B-11D4-A716-446655440000
to 110E8400E29B11D4A716446655440000
.
现在它是 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 个字符。