sql >> Databasteknik >  >> RDS >> Mysql

Hur lagrar jag uuid som nummer?

Om jag förstår det rätt, använder du UUID i din primära kolumn? Folk kommer att säga att en vanlig (heltals) primärnyckel kommer att vara snabbare, men det finns ett annat sätt att använda MySQL:s mörka sida. Faktum är att MySQL är snabbare med binär än något annat när index krävs.

Eftersom UUID är 128 bitar och skrivs som hexadecimalt är det mycket enkelt att snabba upp och lagra UUID.

Ta först bort strecken i ditt programmeringsspråk

Från 110E8400-E29B-11D4-A716-446655440000 till 110E8400E29B11D4A716446655440000 .

Nu är det 32 ​​tecken (som en MD5-hash, som detta också fungerar med).

Eftersom en enda BINARY i MySQL är 8 bitar i storlek, BINARY(16) är storleken på ett UUID (8*16 =128).

Du kan infoga med:

INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))

och fråga med:

SELECT HEX(FieldBin) AS FieldBin FROM Table

Nu i ditt programmeringsspråk, sätt tillbaka strecken vid positionerna 9, 14, 19 och 24 för att matcha ditt ursprungliga UUID. Om positionerna alltid är olika kan du lagra den informationen i ett andra fält.

Fullständigt exempel:

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`

Om du vill använda den här tekniken med en hex-sträng, gör alltid length / 2 för fältlängden. Så för en sha512 skulle fältet vara BINARY (64) eftersom en sha512-kodning är 128 tecken lång.



  1. Spåra databasändringar med hjälp av källkontroll för arbetsmapp

  2. Fel när vänteläge skulle läggas till

  3. MySQL:ÄNDRA TABELL om kolumnen inte finns

  4. MySQL ISNULL() Förklarat