Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 3914|Antwoord: 3

[Bron] [MSSQL] SQL SERVER geordende GUID's en ongeordende GUID's als primaire sleutelaggregatie-indextests

[Link kopiëren]
Geplaatst op 08-06-2023 21:12:26 | | | |
Vereisten: Bij het gebruik van GUID's als primaire sleutelaggregatie-indexen wordt aanbevolen om geordende GUID's te gebruiken, omdat ongeordende GUID's tot ruimteverspilling en de resulterende afname van lees- en schrijfefficiëntie zullen leiden.

Recensie:

SQL Server prestatie-geoptimaliseerde indexfragmentatie
https://www.itsvse.com/thread-9508-1-1.html

[Turn] (MSSQL) SQL Server-database-int en guid voor primaire sleutelvergelijking
https://www.itsvse.com/thread-10605-1-1.html

Database GUID-waarde

Wereldwijd worden Unique Identifier (GUID) datatypes in SQL Server weergegeven door datatypesunieke identificatie, die een binaire waarde van 16 bytes opslaat. Een GUID is een binair nummer waarvan het hoofddoel is als identificatie die uniek moet zijn in een netwerk met veel computers op veel locaties.

Zowel Guid als SqlGuid hebben manieren om verschillende GUID-waarden te vergelijken. De SqlGuid-implementatie gebruikt het gedrag van SQL Server,De laatste zes bytes van de waarde zijn het belangrijkst

Sequentiële GUID's zijn van nature te raden, dus gebruik ze niet in beveiligingsgevoelige contexten

Referentie:De hyperlink-login is zichtbaar.

De database wordt geordend volgens de GUID

De SQL Server-database heeft er eenNewSequentialId()functie om een geordende GUID te creëren. Bij het aanmaken van een tabel kun je deze instellen als de standaardwaarde van een GUID-type veld, en automatisch de waarde van de primaire sleutel aanmaken bij het invoegen van nieuwe data (deze functie kan alleen als standaardwaarde van het veld worden gebruikt, niet direct in SQL worden aangeroepen).

Voorbeeld:

De NewSequentialId()-functie kan alleen in databases worden gebruikt, hoewel de MSDN-documentatie van Microsoft vermeldt dat NEWSEQUENTIALID een wrapper is voor de Windows UuidCreateSequential-functie.

Tip: Gebruik de functie niet als het om vertrouwelijkheid gaat. OmdatHet is mogelijk om de waarde van de volgende gegenereerde GUID te radenom toegang te krijgen tot de gegevens die bij die GUID horen.

Referentie:De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.

.NET maakt een geordende GUID aan

De UuidCreateSequential-functie hangt af van de rekenhardware van de methodeDe laatste 12 bits zijn eigenlijk het MAC-adres van de netwerkkaart

De code is als volgt:

De resultaten zijn als volgt:



Gebrek:

  • Deze methode vereist dat DllImport de Windows-bibliotheek aanroept, dus het is niet cross-platform.
  • Het kan niet worden gebruikt in een geclusterde omgeving, waar meerdere machines naar dezelfde database schrijven, omdat de resulterende GUID's van elkaar verschillen (functie-afhankelijke hardware), wat resulteert in indexfragmentatie.
  • Als je Windows-server opnieuw opstart, kan de GUID op een lager bereik starten, wat resulteert in indexfragmentatie.

Referentie:

De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.

Als je een .NET-programma gebruikt om een SQL SERVER-geordende GUID te maken, wordt aanbevolen een klassenbibliotheek van derden te gebruiken:RT. Kam, het Nuget-commando is als volgt:


De code is als volgt:

Uitvoer:



Referentie:De hyperlink-login is zichtbaar.

Geordende en ongeordende GUID primaire sleutelindexfragmenten

Begin met het maken van twee tabellen met het volgende script:

De test voegt 100.000 gegevensstukken in, en de code is als volgt:

De testresultaten zijn als volgt:

GUIDTijd verbruikt (ms)Scandichtheid [Beste telling: Werkelijke aantal], hoe hoger de waarde, hoe beterLogische Scan Fragmentatie: hoe lager de waarde, hoe beterGemiddelde paginadichtheid (volledig) (gemiddeld: Paginadichtheid (volledig), hoe hoger de waarde, hoe beter
Ongeordende GUID 1336712.58% [61:485]98.97%63.66%
Order GUID 14139100.00% [39:39]0.32%99.61%





De test voegt opnieuw 1 miljoen gegevens in, waarbij een out-of-order GUID 135203 ms kost en een geordende GUID 135134 ms. De opslagruimte is als volgt:

Ongeordend GUID: 36,547 MB
Bestelde GUID: 26,609 MB



Referentie:De hyperlink-login is zichtbaar.


(Einde)




Vorig:.NET Core-programma meertalige lees- en schrijfbronbestanden (.resx)
Volgend:optimalisatie van het geheugengeheugen voor het .NET/C# Stream Read schijfbestand
 Huisbaas| Geplaatst op 27-01-2024 11:07:12 |
ABP maakt een geordende GUID aan voor de sql server-database, de broncode is als volgt:



 Huisbaas| Geplaatst op 24-03-2024 11:43:45 |
EF Core genereert een geordende GUID-code:





De hyperlink-login is zichtbaar.

 Huisbaas| Geplaatst op 11-04-2024 15:00:11 |
MySQL genereert een geordende GUID:De hyperlink-login is zichtbaar.



Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com