Anforderungen: Bei der Verwendung von GUIDs als Primärschlüsselaggregationsindizes wird empfohlen, geordnete GUIDs zu verwenden, da ungeordnete GUIDs zu Speicherplatzverschwendung und der daraus resultierenden Verringerung der Lese- und Schreibeffizienz führen.
Rezension:
Datenbank-GUID-Wert
Globale Unique Identifier (GUID)-Datentypen in SQL Server werden durch Datentypen dargestelltEinzigartiger Identifikator, der einen 16-Byte-Binärwert speichert. Ein GUID ist eine Binärzahl, deren Hauptzweck als Identifikator dient, der in einem Netzwerk mit vielen Computern an vielen Standorten eindeutig sein muss.
Sowohl Guid als auch SqlGuid haben Möglichkeiten, verschiedene GUID-Werte zu vergleichen. Die SQL-Guid-Implementierung verwendet das Verhalten von SQL Server,Die letzten sechs Bytes des Wertes sind die wichtigsten。
Sequentielle GUIDs sind von Natur aus erratbar, daher sollten Sie sie nicht in sicherheitsrelevanten Kontexten verwenden。
Referenz:Der Hyperlink-Login ist sichtbar.
Die Datenbank wird nach dem GUID geordnet
Die SQL-Server-Datenbank hat eine solcheNewSequentialId()Funktion zur Erstellung eines geordneten GUID. Beim Erstellen einer Tabelle kann man sie als Standardwert eines GUID-Typfeldes festlegen und automatisch den Wert des Primärschlüssels beim Einfügen neuer Daten erstellen (diese Funktion kann nur als Standardwert des Feldes verwendet werden, nicht direkt in SQL aufgerufen).
Beispiel:
Die Funktion NewSequentialId() kann nur in Datenbanken verwendet werden, obwohl Microsofts MSDN-Dokumentation angibt, dass NEWSEQUENTIALID ein Wrapper für die Funktion Windows UuidCreateSequential ist.
Tipp: Nutzen Sie die Funktion nicht, wenn es um eine Vertraulichkeitsfrage geht. WeilEs ist möglich, den Wert des nächsten generierten GUID zu erratenum auf die mit diesem GUID verbundenen Daten zuzugreifen.
Referenz:Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
.NET erstellt eine geordnete GUID
Die UuidCreateSequential-Funktion hängt von der Rechenhardware der Methode abDie letzten 12 Bits sind tatsächlich die MAC-Adresse der Netzwerkkarte。
Der Code lautet wie folgt:
Die Ergebnisse sind wie folgt:
Mangel:
- Diese Methode erfordert, dass DllImport die Windows-Bibliothek aufruft, sodass es plattformübergreifend ist.
- Sie kann nicht in einer Clusterumgebung verwendet werden, in der mehrere Maschinen in dieselbe Datenbank schreiben, da die resultierenden GUIDs voneinander unterscheiden (funktionsabhängige Hardware), was zu einer Indexfragmentierung führt.
- Wenn Ihr Windows-Server neu startet, kann der GUID in einem niedrigeren Bereich starten, was zu einer Indexfragmentierung führt.
Referenz:
Der Hyperlink-Login ist sichtbar.
Der Hyperlink-Login ist sichtbar.
Wenn Sie ein .NET-Programm verwenden, um eine SQL SERVER-geordnete GUID zu erstellen, wird empfohlen, eine Klassenbibliothek von Drittanbietern zu verwenden:RT. KammDer Nuget-Befehl lautet wie folgt:
Der Code lautet wie folgt:
Ausgabe:
Referenz:Der Hyperlink-Login ist sichtbar.
Geordnete und ungeordnete GUID-Primärschlüsselindexfragmente
Beginnen Sie damit, zwei Tabellen mit folgendem Skript zu erstellen:
Der Test fügt 100.000 Datenstücke ein, und der Code lautet wie folgt:
Die Testergebnisse sind wie folgt:
| GUID | Zeitverschwendung (ms) | Scandichte [Beste Anzahl: Tatsächliche Anzahl], je höher der Wert, desto besser | Logische Scanfragmentierung: Je niedriger der Wert, desto besser | Durchschnittliche Seitendichte (vollständig) (Durchschnitt: Seitendichte (voll), je höher der Wert, desto besser | | Ungeordnete GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Order GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Der Test fügt erneut 1 Million Datenstücke ein, wobei ein außergeordneter GUID 135203 ms und ein ordinierter GUID 135134 ms benötigt. Die Auslastung des Lagerraums ist wie folgt:
Ungeordneter GUID: 36,547 MB Bestellte GUID: 26,609 MB
Referenz:Der Hyperlink-Login ist sichtbar.
(Ende)
|