Frage

Was wäre die effizienteste Datentyp eine UUID / GUID in Datenbanken zu speichern, die nicht über eine native UUID / GUID-Datentyp? 2 BIGINTs?

Und was wäre der effizienteste Code (C # bevorzugt) zu konvertieren und aus einer GUID auf diese Art?

Danke.

War es hilfreich?

Lösung

Es ist schwer zu sagen, was die effizienteste, ohne zu wissen, die Datenbank würde Sie verwenden.

Meine erste Neigung wäre, eine binary(16) Spalte zu verwenden.

Als für diesen Wert in C #, die System.Guid Typ hat einen Konstruktor, der eine byte[] Array annimmt, und ein Verfahren, das eine ToByteArray() Byte-Array zurückgibt.

Andere Tipps

In meiner Erfahrung ist die UUID in zwei ganzen Zahlen aufgebrochen wird noch effizienter sein als ein Zeichen Feld. Verschiedene DBs reagieren allerdings auf unterschiedliche Weise. Collation könnte einen Unterschied machen, auch dort. Davon abgesehen, gibt es in der Regel viel größer Leistung „Sünden“ in allen Anwendungen, und ich glaube nicht, dass dies eine große Sache oder so für viele Anwendungen sein würde. Sie werden sich aus der nur auf Basis zu beurteilen haben, wie beschäftigt ist dieser Teil Ihrer App bekommen gehen? Haben Sie die absolut schnellste Abfrage möglicherweise von UUID benötigen? Hat 600ns vs 400 ns eine große Zeitdifferenz für Sie?

Wenn es geht um viele manuellen SQL-doen mit der DB sein, dann eine Taste, die einen UUID aus getrennten Feldern sind umfassend stinkt Art, wenn Sie tun müssen, um einen Einsatz und Theres keinen db Standard dafür. Das ist auch ein Problem mit Zeichen though.

Wenn Sie eine Datenbank-Abstraktionsschicht, dann mehrere Tabellenfelder kombinieren Ihre UUID bekommen sollte kein großes Problem sein.

an der .NET guid Klasse gibt es ein paar Möglichkeiten, um eine gUID zu initialisieren:

Guid (Int32, Int16, Int16, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte) Guid (string)

Während es effizienter sein kann, in der Theorie, zu speichern, die ganze Zahl in einer Datenbank (Sie Bitverschieben wirklich nutzen könnten speichern 4 32-Bit-Integer .. aber man müsste diese berechnen, wenn das Laden und Speichern jeder Zeit. Darüber hinaus ist es vier Felder in der Datenbank übernehmen würde .. ich könnte mir vorstellen, es würde am Ende wird weniger effizient.

Fügen Sie in der Unmöglichkeit, diese direkt in der Datenbank zu lesen für das Debuggen / Testzwecke, und ich würde sagen, die Hände nach unten, dass es am besten ist, eine Zeichenfolge zu speichern. Es ist nur eine 32-stelliges Feld (36, wenn Sie die Bindestriche), und es ist sehr einfach zu konvertieren. guid. ToString () und new Guid (String);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top