{"id":89,"date":"2010-02-26T08:00:56","date_gmt":"2010-02-26T07:00:56","guid":{"rendered":"http:\/\/www.webmaid.de\/?p=89"},"modified":"2010-02-25T11:36:13","modified_gmt":"2010-02-25T10:36:13","slug":"uuid-effizient-in-mysql-nutzen","status":"publish","type":"post","link":"https:\/\/www.webmaid.de\/2010\/02\/uuid-effizient-in-mysql-nutzen\/","title":{"rendered":"UUID effizient in MySQL nutzen"},"content":{"rendered":"

Wenn man eine UUID erzeugt, dann erh\u00e4lt man grunds\u00e4tzlich einen String in der Form 550e8400-e29b-11d4-a716-446655440000. Diesen String k\u00f6nnte man nun als char(32) oder char(34) in der Datenbank abspeichern, was jedoch zu einem Performanceverlust f\u00fchren k\u00f6nnte.
\n
\nStattdessen sollte man den String umwandeln und in einem binary(16) abspeichern. Zum Umwandeln des Strings k\u00f6nnte man die Datenbank „belasten“ UNHEX(REPLACE(UUID(), '-',''))<\/code> oder dies auf dem Client bereits durchf\u00fchren (je nachdem wo man die UUID erzeugt).<\/p>\n

Zum Verdeutlichen erst einmal die Tabellenstruktur f\u00fcr einen kleinen UUID-Test.<\/p>\n

create table uuidtest (\r\n     id varbinary(16) not null,\r\n     title varchar(15) not null,\r\n     PRIMARY KEY(id)\r\n);<\/code><\/pre>\n

Auf dem Client (z.B. in PHP) l\u00f6scht man nun alle Bindestriche aus der UUID raus und f\u00fcgt eine neue Zeile mit dem entsprechenden Statement hinzu. Bei diesem Statement ist das vorangestellte 0x vor der eigentlichen UUID zu beachten.<\/p>\n

INSERT INTO uuidtest (id,title) VALUES (0x550e8400e29b11d4a716446655440000, 'Titel');<\/code><\/pre>\n

Die einzige kleine H\u00fcrde bleibt noch, wenn man den Wert abfragen will. Bei einem SELECT w\u00fcrde nur eine f\u00fcr uns unlesbare Zeichenkette herauskommen, also m\u00fcssen wir noch eine SQL-Funktion aufrufen:<\/p>\n

SELECT hex(id) FROM uuidtest;<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"

Wenn man eine UUID erzeugt, dann erh\u00e4lt man grunds\u00e4tzlich einen String in der Form 550e8400-e29b-11d4-a716-446655440000. Diesen String k\u00f6nnte man nun als char(32) oder char(34) in der Datenbank abspeichern, was jedoch zu einem Performanceverlust f\u00fchren k\u00f6nnte.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,3],"tags":[21,89,22],"_links":{"self":[{"href":"https:\/\/www.webmaid.de\/wp-json\/wp\/v2\/posts\/89"}],"collection":[{"href":"https:\/\/www.webmaid.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webmaid.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webmaid.de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webmaid.de\/wp-json\/wp\/v2\/comments?post=89"}],"version-history":[{"count":13,"href":"https:\/\/www.webmaid.de\/wp-json\/wp\/v2\/posts\/89\/revisions"}],"predecessor-version":[{"id":102,"href":"https:\/\/www.webmaid.de\/wp-json\/wp\/v2\/posts\/89\/revisions\/102"}],"wp:attachment":[{"href":"https:\/\/www.webmaid.de\/wp-json\/wp\/v2\/media?parent=89"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webmaid.de\/wp-json\/wp\/v2\/categories?post=89"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webmaid.de\/wp-json\/wp\/v2\/tags?post=89"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}