sql >> Database teknologi >  >> RDS >> Mysql

Hvordan gemmer man uuid som nummer?

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.



  1. Et følelsesløst logisk blik på SQL Server-navnekonventioner

  2. Sådan konfigureres PostgreSQL til at acceptere alle indgående forbindelser

  3. MySQL giver alle privilegier til databasen undtagen én tabel

  4. Hvordan skriver man DataFrame til postgres-tabel?