Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 3914|Răspunde: 3

[Sursă] [MSSQL] GUID-urile ordonate de SQL SERVER și GUID-urile neordonate ca teste principale de indexare a agregării cheilor

[Copiază linkul]
Postat pe 08.06.2023 21:12:26 | | | |
Cerințe: Când se utilizează GUID-uri ca indici principali de agregare a cheilor, se recomandă utilizarea GUID-urilor ordonate, deoarece GUID-urile neordonate vor duce la risipă de spațiu și la scăderea eficienței citirii și scrierii.

Recenzie:

Fragmentarea indexului optimizată pentru performanță SQL Server
https://www.itsvse.com/thread-9508-1-1.html

[Întoarce] (MSSQL) Baza de date SQL Server int și guid pentru compararea cheilor principale
https://www.itsvse.com/thread-10605-1-1.html

Valoarea GUID a bazei de date

Tipurile de date cu Identificator Unic Global (GUID) în SQL Server sunt reprezentate prin tipuri de dateUnicidentificator, care stochează o valoare binară de 16 octeți. Un GUID este un număr binar al cărui scop principal este ca un identificator care trebuie să fie unic într-o rețea cu multe calculatoare pe mai multe locații.

Atât GUID, cât și SqlGuid au metode de a compara valori GUID diferite. Implementarea SqlGuid folosește comportamentul SQL Server,Ultimii șase octeți ai valorii sunt cei mai importanți

GUID-urile secvențiale sunt în mod inerent ghicibile, așa că nu le folosi în contexte sensibile la securitate

Referință:Autentificarea cu hyperlink este vizibilă.

Baza de date este ordonată de GUID

Baza de date SQL Server are unulNewSequentialId()funcția de a crea un GUID ordonat. Când creezi un tabel, îl poți seta ca valoare implicită a unui câmp de tip GUID și poți crea automat valoarea cheii principale la inserarea de date noi (această funcție poate fi folosită doar ca valoare implicită a câmpului, nu apelată direct în SQL).

Exemplu:

Funcția NewSequentialId() poate fi folosită doar în baze de date, deși documentația MSDN a Microsoft afirmă că NEWSEQUENTIALID este un wrapper pentru funcția Windows UuidCreateSequential.

Sfat: Nu folosi funcția dacă este o problemă de confidențialitate. FiindcăEste posibil să ghicești valoarea următorului GUID generatpentru a accesa datele asociate acelui GUID.

Referință:Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.

.NET creează un GUID ordonat

Funcția UuidCreateSequential depinde de hardware-ul de calcul al metodeiUltimii 12 biți sunt de fapt adresa MAC a plăcii de rețea

Codul este următorul:

Rezultatele sunt următoarele:



Neajuns:

  • Această metodă necesită DllImport pentru a chema biblioteca Windows, deci nu este cross-platform.
  • Nu poate fi folosit într-un mediu clusterizat, unde mai multe mașini scriu în aceeași bază de date, deoarece GUID-urile rezultate vor fi diferite între ele (hardware de calcul dependent de funcție), ceea ce duce la fragmentarea indicilor.
  • Dacă serverul tău Windows se repornește, GUID-ul poate începe dintr-un interval mai mic, ceea ce duce la fragmentarea indexului.

Referință:

Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.

Dacă folosești un program .NET pentru a crea un GUID ordonat de SQL SERVER, este recomandat să folosești o bibliotecă de clase terță:RT. Pieptene, comanda nuget este următoarea:


Codul este următorul:

Ieşire:



Referință:Autentificarea cu hyperlink este vizibilă.

Fragmente ordonate și neordonate ale indexului cheie primară GUID

Începe prin a crea două tabele cu următorul script:

Testul introduce 100.000 de date și codul este următorul:

Rezultatele testelor sunt următoarele:

GUIDTimp consumat (ms)Densitatea scanării [Cel mai bun numărător: Numărătoarea reală], cu cât valoarea este mai mare, cu atât mai bunăFragmentarea prin scanare logică, cu cât valoarea este mai mică, cu atât mai bunăDensitatea medie a paginilor (completă) (Medie: Densitatea paginilor (completă), cu cât valoarea este mai mare, cu atât mai bună
GUID neordonat 1336712.58% [61:485]98.97%63.66%
Ordina GUID 14139100.00% [39:39]0.32%99.61%





Testul inserează din nou 1 milion de bucăți de date, cu un GUID în afara ordinii care durează 135203 ms și un GUID ordonat care durează 135134 ms. Ocuparea spațiului de depozitare este următoarea:

GHID neordonat: 36,547 MB
GHID comandat: 26,609 MB



Referință:Autentificarea cu hyperlink este vizibilă.


(Sfârșit)




Precedent:Fișiere resurse multilingve (.resx) pentru programul .NET Core
Următor:.NET/C# Optimizarea memoriei fișierelor de disc pentru citirea fluxului
 Proprietarul| Postat pe 27.01.2024 11:07:12 |
ABP creează un GUID ordonat pentru baza de date sql server, codul sursă fiind următorul:



 Proprietarul| Postat pe 24.03.2024 11:43:45 |
 Proprietarul| Postat pe 11.04.2024 15:00:11 |
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com