UUID effizient in MySQL nutzen

Wenn man eine UUID erzeugt, dann erhält man grundsätzlich einen String in der Form 550e8400-e29b-11d4-a716-446655440000. Diesen String könnte man nun als char(32) oder char(34) in der Datenbank abspeichern, was jedoch zu einem Performanceverlust führen könnte.

Stattdessen sollte man den String umwandeln und in einem binary(16) abspeichern. Zum Umwandeln des Strings könnte man die Datenbank „belasten“ UNHEX(REPLACE(UUID(), '-','')) oder dies auf dem Client bereits durchführen (je nachdem wo man die UUID erzeugt).

Zum Verdeutlichen erst einmal die Tabellenstruktur für einen kleinen UUID-Test.

create table uuidtest (
     id varbinary(16) not null,
     title varchar(15) not null,
     PRIMARY KEY(id)
);

Auf dem Client (z.B. in PHP) löscht man nun alle Bindestriche aus der UUID raus und fügt eine neue Zeile mit dem entsprechenden Statement hinzu. Bei diesem Statement ist das vorangestellte 0x vor der eigentlichen UUID zu beachten.

INSERT INTO uuidtest (id,title) VALUES (0x550e8400e29b11d4a716446655440000, 'Titel');

Die einzige kleine Hürde bleibt noch, wenn man den Wert abfragen will. Bei einem SELECT würde nur eine für uns unlesbare Zeichenkette herauskommen, also müssen wir noch eine SQL-Funktion aufrufen:

SELECT hex(id) FROM uuidtest;

Beitrag veröffentlicht

in

,

von

Schlagwörter:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert