Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 3914|Antwort: 3

[Quelle] [MSSQL] SQL SERVER ordnete GUIDs und ungeordnete GUIDs als Primärschlüsselaggregationsindextests

[Link kopieren]
Veröffentlicht am 08.06.2023 21:12:26 | | | |
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:

SQL Server leistungsoptimierte Indexfragmentierung
https://www.itsvse.com/thread-9508-1-1.html

[Turn] (MSSQL) SQL Server Datenbank-int und Guid zum Vergleich von Primärschlüsseln
https://www.itsvse.com/thread-10605-1-1.html

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:

GUIDZeitverschwendung (ms)Scandichte [Beste Anzahl: Tatsächliche Anzahl], je höher der Wert, desto besserLogische Scanfragmentierung: Je niedriger der Wert, desto besserDurchschnittliche Seitendichte (vollständig) (Durchschnitt: Seitendichte (voll), je höher der Wert, desto besser
Ungeordnete GUID 1336712.58% [61:485]98.97%63.66%
Order GUID 14139100.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)




Vorhergehend:.NET Core-Programm-mehrsprachige Lese- und Schreibressourcendateien (.resx)
Nächster:Optimierung des .NET/C#-Stream-Lese-Festplattendatei-Speichers
 Vermieter| Veröffentlicht am 27.01.2024 11:07:12 |
ABP erstellt eine geordnete GUID für die SQL-Server-Datenbank, der Quellcode ist wie folgt:



 Vermieter| Veröffentlicht am 24.03.2024 11:43:45 |
EF Core erzeugt einen geordneten GUID-Code:





Der Hyperlink-Login ist sichtbar.

 Vermieter| Veröffentlicht am 11.04.2024 15:00:11 |
MySQL erzeugt einen geordneten GUID:Der Hyperlink-Login ist sichtbar.



Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com