Reikalavimai: Naudojant GUID kaip pirminio rakto agregavimo indeksus, rekomenduojama naudoti užsakytus GUID, nes nesutvarkyti GUID eikvoja vietą ir dėl to sumažės skaitymo ir rašymo efektyvumas.
Peržiūra:
Duomenų bazės GUID reikšmė
SQL serverio visuotinio unikalaus identifikatoriaus (GUID) duomenų tipai pateikiami pagal duomenų tipusunikalus identifikatorius, kuriame saugoma 16 baitų dvejetainė reikšmė. GUID yra dvejetainis skaičius, kurio pagrindinė paskirtis yra identifikatorius, kuris turi būti unikalus tinkle, kuriame yra daug kompiuterių daugelyje svetainių.
Tiek GUID, tiek SqlGuid turi būdų palyginti skirtingas GUID reikšmes. "SqlGuid" diegimas naudoja "SQL Server" elgseną,Paskutiniai šeši vertės baitai yra svarbiausi。
Nuoseklius GUID iš prigimties galima atspėti, todėl nenaudokite jų saugumui jautriuose kontekstuose。
Nuoroda:Hipersaito prisijungimas matomas.
Duomenų bazė rikiuojama pagal GUID
SQL serverio duomenų bazėje yra vienasNaujasSequentialId()funkciją, kad sukurtumėte užsakytą GUID. Kurdami lentelę, galite nustatyti ją kaip numatytąją GUID tipo lauko reikšmę ir automatiškai sukurti pirminio rakto reikšmę įterpdami naujus duomenis (ši funkcija gali būti naudojama tik kaip numatytoji lauko reikšmė, o ne tiesiogiai iškviečiama SQL).
Pavyzdys:
Funkcija NewSequentialId() gali būti naudojama tik duomenų bazėse, nors Microsoft MSDN dokumentacijoje teigiama, kad NEWSEQUENTIALID yra Windows UuidCreateSequential funkcijos įvyniojimas.
Patarimas: nenaudokite funkcijos, jei tai konfidencialumo problema. NesGalima atspėti kito sugeneruoto GUID reikšmę, kad pasiektumėte su tuo GUID susietus duomenis.
Nuoroda:Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
.NET sukuria užsakytą GUID
Funkcija UuidCreateSequential priklauso nuo metodo skaičiavimo aparatūrosPaskutiniai 12 bitų iš tikrųjų yra tinklo plokštės MAC adresas。
Kodas yra toks:
Rezultatai yra tokie:
Trūkumas:
- Šis metodas reikalauja, kad "DllImport" iškviestų "Windows" biblioteką, todėl jis nėra kelių platformų.
- Jo negalima naudoti klasterinėje aplinkoje, kur kelios mašinos rašo į tą pačią duomenų bazę, nes gaunami GUID skirsis vienas nuo kito (nuo funkcijos priklausanti kompiuterinė aparatūra), todėl indeksas bus fragmentuotas.
- Jei "Windows" serveris paleidžiamas iš naujo, GUID gali prasidėti mažesniame diapazone, todėl indeksas gali būti suskaidytas.
Nuoroda:
Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
Jei naudojate .NET programą SQL SERVER užsakytam GUID kurti, rekomenduojama naudoti trečiosios šalies klasių biblioteką:RT. Šukos, nuget komanda yra tokia:
Kodas yra toks:
Išvesties:
Nuoroda:Hipersaito prisijungimas matomas.
Sutvarkyti ir nesutvarkyti GUID pirminio rakto indekso fragmentai
Pradėkite kurdami dvi lenteles su tokiu scenarijumi:
Testas įterpia 100 000 vienetų duomenų, o kodas yra toks:
Bandymo rezultatai yra tokie:
| GUID | Sunaudotas laikas (ms) | Nuskaitymo tankis [Best Count: Actual Count], kuo didesnė vertė, tuo geriau | Loginio nuskaitymo fragmentacija, kuo mažesnė reikšmė, tuo geriau | Vidutinis puslapių tankis (pilnas) (vid. Puslapio tankis (pilnas), kuo didesnė reikšmė, tuo geriau | | Neužsakytas GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Užsakymo GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Testas vėl įterpia 1 milijoną duomenų vienetų, o netvarkingas GUID užima 135203 ms, o ordinuotas GUID – 135134 ms. Sandėliavimo vietos užimtumas yra toks:
Neužsakytas GUID: 36.547 MB Užsakytas GUID: 26.609 MB
Nuoroda:Hipersaito prisijungimas matomas.
(Pabaiga)
|