Hvis jeg forstår det rigtigt, bruger du UUID'er i din primære kolonne? Folk vil sige, at en almindelig (heltals) primærnøgle vil være hurtigere, men der er en anden måde at bruge MySQL's mørke side. Faktisk er MySQL hurtigere ved at bruge binær end noget andet, når der kræves indekser.
Da UUID er 128 bit og er skrevet som hexadecimal, er det meget nemt at fremskynde og gemme UUID.
Først skal du fjerne stregerne i dit programmeringssprog
Fra 110E8400-E29B-11D4-A716-446655440000
til 110E8400E29B11D4A716446655440000
.
Nu er det 32 tegn (som en MD5-hash, som denne også fungerer med).
Siden en enkelt BINARY
i MySQL er 8 bit i størrelse, BINARY(16)
er størrelsen af et UUID (8*16 =128).
Du kan indsætte ved at bruge:
INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))
og forespørg ved hjælp af:
SELECT HEX(FieldBin) AS FieldBin FROM Table
Nu i dit programmeringssprog skal du genindsætte stregerne ved positionerne 9, 14, 19 og 24 for at matche din originale UUID. Hvis positionerne altid er forskellige, kan du gemme disse oplysninger i et andet felt.
Fuldstændig eksempel:
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`
Hvis du vil bruge denne teknik med en hex-streng, skal du altid gøre length / 2
for feltlængden. Så for en sha512 ville feltet være BINARY (64)
da en sha512-kodning er 128 tegn lang.