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:
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:
| GUID | Tijd verbruikt (ms) | Scandichtheid [Beste telling: Werkelijke aantal], hoe hoger de waarde, hoe beter | Logische Scan Fragmentatie: hoe lager de waarde, hoe beter | Gemiddelde paginadichtheid (volledig) (gemiddeld: Paginadichtheid (volledig), hoe hoger de waarde, hoe beter | | Ongeordende GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Order GUID | 14139 | 100.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)
|