Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 3914|Atsakyti: 3

[Šaltinis] [MSSQL] SQL SERVER užsakyti GUID ir neužsakyti GUID kaip pirminio rakto agregavimo indekso testai

[Kopijuoti nuorodą]
Paskelbta 2023-06-08 21:12:26 | | | |
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:

SQL serverio našumui optimizuotas indekso fragmentavimas
https://www.itsvse.com/thread-9508-1-1.html

[Turn] (MSSQL) SQL Server duomenų bazės int ir guid pirminio rakto palyginimui
https://www.itsvse.com/thread-10605-1-1.html

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:

GUIDSunaudotas laikas (ms)Nuskaitymo tankis [Best Count: Actual Count], kuo didesnė vertė, tuo geriauLoginio nuskaitymo fragmentacija, kuo mažesnė reikšmė, tuo geriauVidutinis puslapių tankis (pilnas) (vid. Puslapio tankis (pilnas), kuo didesnė reikšmė, tuo geriau
Neužsakytas GUID 1336712.58% [61:485]98.97%63.66%
Užsakymo GUID 14139100.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)




Ankstesnis:.NET Core programos daugiakalbiai skaitymo ir rašymo išteklių (.resx) failai
Kitą:.NET/C# srauto skaitymo disko failų atminties optimizavimas
 Savininkas| Paskelbta 2024-01-27 11:07:12 |
ABP sukuria užsakytą SQL serverio duomenų bazės GUID, šaltinio kodas yra toks:



 Savininkas| Paskelbta 2024-03-24 11:43:45 |
"EF Core" sugeneruoja užsakytą GUID kodą:





Hipersaito prisijungimas matomas.

 Savininkas| Paskelbta 2024-04-11 15:00:11 |
MySQL sugeneruoja užsakytą GUID:Hipersaito prisijungimas matomas.



Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com