Pokud tomu dobře rozumím, používáte UUID ve svém primárním sloupci? Lidé budou říkat, že běžný (celočíselný) primární klíč bude rychlejší, ale existuje i jiný způsob, jak využít temnou stránku MySQL. Ve skutečnosti je MySQL rychlejší při použití binárních souborů než cokoli jiného, když jsou vyžadovány indexy.
Protože UUID je 128 bitů a je zapsáno jako šestnáctkové, je velmi snadné UUID urychlit a uložit.
Nejprve ve svém programovacím jazyce odstraňte pomlčky
Od 110E8400-E29B-11D4-A716-446655440000
na 110E8400E29B11D4A716446655440000
.
Nyní je to 32 znaků (jako hash MD5, se kterým to také funguje).
Od jediného BINARY
v MySQL má velikost 8 bitů, BINARY(16)
je velikost UUID (8*16 =128).
Můžete vložit pomocí:
INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))
a dotazujte pomocí:
SELECT HEX(FieldBin) AS FieldBin FROM Table
Nyní ve svém programovacím jazyce znovu vložte pomlčky na pozice 9, 14, 19 a 24, aby odpovídaly vašemu původnímu UUID. Pokud se pozice vždy liší, můžete tyto informace uložit do druhého pole.
Celý příklad:
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`
Pokud chcete použít tuto techniku s jakýmkoli hexadecimálním řetězcem, vždy proveďte length / 2
pro délku pole. Takže pro sha512 by pole bylo BINARY (64)
protože kódování sha512 je dlouhé 128 znaků.