Als ik het goed begrijp, gebruikt u UUID's in uw primaire kolom? Mensen zullen zeggen dat een gewone (integer) primaire sleutel sneller zal zijn, maar er is een andere manier om de donkere kant van MySQL te gebruiken. In feite is MySQL sneller bij het gebruik van binair dan wat dan ook wanneer indexen vereist zijn.
Aangezien UUID 128 bits is en als hexadecimaal wordt geschreven, is het heel eenvoudig om de UUID te versnellen en op te slaan.
Verwijder eerst in uw programmeertaal de streepjes
Van 110E8400-E29B-11D4-A716-446655440000
naar 110E8400E29B11D4A716446655440000
.
Nu zijn het 32 tekens (zoals een MD5-hash, waarmee dit ook werkt).
Sinds een enkele BINARY
in MySQL is 8 bits groot, BINARY(16)
is de grootte van een UUID (8*16 =128).
U kunt invoegen met:
INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))
en zoek op met:
SELECT HEX(FieldBin) AS FieldBin FROM Table
Plaats nu in uw programmeertaal de streepjes opnieuw op de posities 9, 14, 19 en 24 om overeen te komen met uw originele UUID. Als de posities altijd verschillend zijn, zou je die informatie in een tweede veld kunnen opslaan.
Volledig voorbeeld :
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`
Als je deze techniek met een hex-tekenreeks wilt gebruiken, doe dan altijd length / 2
voor de veldlengte. Dus voor een sha512 is het veld BINARY (64)
aangezien een sha512-codering 128 tekens lang is.