Zahteve: Pri uporabi GUID-ov kot indeksov za agregacijo primarnih ključev je priporočljivo uporabljati urejene GUID-je, saj neurejeni GUID-ji povzročajo izgubo prostora in posledično zmanjšanje učinkovitosti branja in pisanja.
Pregled:
Vrednost GUID baze podatkov
Globalno edinstveni identifikatorji (GUID) podatkovni tipi v SQL Serverju so predstavljeni z podatkovnimi tipiuniqueidentifier, ki shranjuje 16-bajtno binarno vrednost. GUID je binarna številka, katere glavni namen je identifikator, ki mora biti edinstven v omrežju z mnogimi računalniki na več lokacijah.
Tako Guid kot SqlGuid imata načine za primerjavo različnih GUID vrednosti. Implementacija SqlGuid uporablja vedenje SQL Serverja,Zadnjih šest bajtov vrednosti je najpomembnejših。
Zaporedni GUID-i so po naravi ugibljivi, zato jih ne uporabljajte v varnostno občutljivih kontekstih。
Referenčni:Prijava do hiperpovezave je vidna.
Baza podatkov je urejena po GUID
SQL Server baza podatkov ima enoNewSequentialId()funkcije za ustvarjanje urejenega GUID-a. Pri ustvarjanju tabele jo lahko nastavite kot privzeto vrednost polja tipa GUID in samodejno ustvarite vrednost primarnega ključa ob vnosu novih podatkov (ta funkcija se lahko uporablja le kot privzeta vrednost polja, ne pa neposredno klicana v SQL).
Primer:
Funkcijo NewSequentialId() je mogoče uporabljati le v podatkovnih bazah, čeprav Microsoftova MSDN dokumentacija navaja, da je NEWSEQUENTIALID ovojnica za funkcijo Windows UuidCreateSequential (UuidCreateSequential v operacijskem sistemu).
Nasvet: Funkcije ne uporabljajte, če gre za vprašanje zaupnosti. KerMožno je ugibati vrednost naslednjega generiranega GUIDza dostop do podatkov, povezanih s tem GUID-jem.
Referenčni:Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
.NET ustvari urejen GUID
Funkcija UuidCreateSequential je odvisna od računalniške strojne opreme metodeZadnjih 12 bitov je pravzaprav MAC naslov omrežne kartice。
Koda je naslednja:
Rezultati so naslednji:
Pomanjkljivost:
- Ta metoda zahteva, da DllImport kliče Windows knjižnico, zato ni večplatformska.
- Ni ga mogoče uporabljati v gručenem okolju, kjer več računalnikov piše v isto bazo podatkov, ker bodo nastali GUID-ji med seboj različni (strojna oprema, odvisna od funkcije), kar povzroča fragmentacijo indeksov.
- Če se vaš Windows strežnik ponovno zažene, se lahko GUID začne na nižjem območju, kar povzroči fragmentacijo indeksa.
Referenčni:
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
Če uporabljate .NET program za ustvarjanje SQL SERVER urejenega GUID-a, je priporočljivo uporabiti knjižnico razredov tretje osebe:RT. Glavnik, ukaz nuget je naslednji:
Koda je naslednja:
Izhod:
Referenčni:Prijava do hiperpovezave je vidna.
Urejeni in neurejeni fragmenti indeksa primarnega ključa GUID
Začnite z ustvarjanjem dveh tabel z naslednjim skriptom:
Test vnese 100.000 podatkov, koda pa je naslednja:
Rezultati testa so naslednji:
| GUID | Čas, porabljen (ms) | Gostota skeniranja [Najboljše štetje: dejansko število], višja kot je vrednost, bolje | Fragmentacija logičnega skeniranja, nižja kot je vrednost, bolje | Povprečna gostota strani (polna) (Povprečno Gostota strani (polna), višja kot je vrednost, bolje | | Neurejeni GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Naročilo GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Test ponovno vnese 1 milijon podatkov, pri čemer GUID izven vrstnega reda potrebuje 135203 ms, ordinirani GUID pa 135134 ms. Zasedenost skladiščnega prostora je naslednja:
Neurejeni GUID: 36,547 MB Naročena GUID: 26,609 MB
Referenčni:Prijava do hiperpovezave je vidna.
(Konec)
|