UUID effizient in MySQL nutzen

February 26th, 2010 by author Leave a reply »

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;
VN:F [1.9.22_1171]
Rating: 8.3/10 (11 votes cast)
VN:F [1.9.22_1171]
Rating: +2 (from 2 votes)
UUID effizient in MySQL nutzen, 8.3 out of 10 based on 11 ratings
Advertisement

Leave a Reply