Se bem entendi, você está usando UUIDs em sua coluna primária? As pessoas dirão que uma chave primária regular (inteira) será mais rápida, mas há outra maneira de usar o lado escuro do MySQL. Na verdade, o MySQL é mais rápido usando binário do que qualquer outra coisa quando os índices são necessários.
Como o UUID é de 128 bits e é escrito como hexadecimal, é muito fácil acelerar e armazenar o UUID.
Primeiro, em sua linguagem de programação, remova os traços
De
110E8400-E29B-11D4-A716-446655440000
para 110E8400E29B11D4A716446655440000
. Agora são 32 caracteres (como um hash MD5, com o qual isso também funciona).
Como um único
BINARY
no MySQL tem 8 bits de tamanho, BINARY(16)
é o tamanho de um UUID (8*16 =128). Você pode inserir usando:
INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))
e consulte usando:
SELECT HEX(FieldBin) AS FieldBin FROM Table
Agora, em sua linguagem de programação, reinsira os traços nas posições 9, 14, 19 e 24 para corresponder ao seu UUID original. Se as posições forem sempre diferentes, você poderá armazenar essa informação em um segundo campo.
Exemplo completo:
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`
Se você quiser usar esta técnica com qualquer string hexadecimal, sempre faça
length / 2
para o comprimento do campo. Então, para um sha512, o campo seria BINARY (64)
uma vez que uma codificação sha512 tem 128 caracteres.