Krav: Når man bruger GUID'er som primære nøgleaggregationsindeks, anbefales det at bruge ordnede GUID'er, da uordnede GUID'er vil medføre spild af plads og dermed fald i læse- og skriveeffektivitet.
Anmeldelse:
Database GUID-værdi
Globale unikke identifikatorer (GUID) datatyper i SQL Server repræsenteres af datatyperUnikidentifikator, som gemmer en 16-byte binær værdi. En GUID er et binært tal, hvis hovedformål er at være en identifikator, der skal være unik i et netværk med mange computere på mange steder.
Både Guid og SqlGuid har måder at sammenligne forskellige GUID-værdier på. SqlGuid-implementeringen bruger SQL Server-adfærd,De sidste seks bytes af værdien er de vigtigste。
Sekventielle GUID'er er iboende gættbare, så brug dem ikke i sikkerhedsfølsomme sammenhænge。
Henvisning:Hyperlink-login er synlig.
Databasen er ordnet efter GUID
SQL Server-databasen har en sådanNewSequentialId()funktion til at oprette en ordnet GUID. Når du opretter en tabel, kan du sætte den som standardværdi for et GUID-type felt og automatisk oprette værdien af primærnøglen, når du indsætter nye data (denne funktion kan kun bruges som standardværdi for feltet, ikke direkte kaldes i SQL).
Eksempel:
NewSequentialId()-funktionen kan kun bruges i databaser, selvom Microsofts MSDN-dokumentation angiver, at NEWSEQUENTIALID er en wrapper for Windows UuidCreateSequential-funktionen.
Tip: Brug ikke funktionen, hvis det er et fortrolighedsspørgsmål. FordiDet er muligt at gætte værdien af den næste genererede GUIDfor at få adgang til dataene tilknyttet den GUID.
Henvisning:Hyperlink-login er synlig.
Hyperlink-login er synlig.
.NET opretter en ordnet GUID
UuidCreateSequential-funktionen afhænger af metodens computehardwareDe sidste 12 bit er faktisk netværkskortets MAC-adresse。
Koden er som følger:
Resultaterne er som følger:
Mangel:
- Denne metode kræver, at DllImport kalder Windows-biblioteket, så det er ikke platformtovernet.
- Den kan ikke bruges i et klyngemiljø, hvor flere maskiner skriver til den samme database, fordi de resulterende GUID'er vil være forskellige fra hinanden (funktionsafhængig computerhardware), hvilket resulterer i indeksfragmentering.
- Hvis din Windows-server genstarter, kan GUID'en starte i et lavere område, hvilket resulterer i indeksfragmentering.
Henvisning:
Hyperlink-login er synlig.
Hyperlink-login er synlig.
Hvis du bruger et .NET-program til at oprette en SQL SERVER-ordnet GUID, anbefales det at bruge et tredjeparts klassebibliotek:RT. Kam, Nuget-kommandoen er som følger:
Koden er som følger:
Udgang:
Henvisning:Hyperlink-login er synlig.
Ordnede og uordnede GUID primærnøgleindeksfragmenter
Start med at oprette to tabeller med følgende script:
Testen indsætter 100.000 datastykker, og koden er som følger:
Testresultaterne er som følger:
| GUID | Tidsforbrug (ms) | Scanningstæthed [Bedste antal: Faktisk antal], jo højere værdi, desto bedre | Logisk scanfragmentering, jo lavere værdi, jo bedre | Gennemsnitlig sidetæthed (fuld) (Gennemsnit. Sidetæthed (fuld), jo højere værdi, jo bedre | | Uordnet GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Order GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Testen indsætter igen 1 million datastykker, hvor en uordnet GUID tager 135203 ms og en ordineret GUID tager 135134 ms. Belægningen af opbevaringsplads er som følger:
Uordnet GUID: 36,547 MB Bestilt GUID: 26,609 MB
Henvisning:Hyperlink-login er synlig.
(Slut)
|