Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 3914|Svare: 3

[Kilde] [MSSQL] SQL SERVER ordnede GUID-er og uordnede GUID-er som primærnøkkelaggregeringsindekstester

[Kopier lenke]
Publisert på 08.06.2023 21:12:26 | | | |
Krav: Når man bruker GUID-er som primærnøkkelaggregationsindekser, anbefales det å bruke ordnede GUID-er, fordi uordnede GUID-er vil føre til plasssløsing og den påfølgende reduksjonen i lese- og skriveeffektivitet.

Anmeldelse:

SQL Server ytelsesoptimalisert indeksfragmentering
https://www.itsvse.com/thread-9508-1-1.html

[Turn] (MSSQL) SQL Server-database int og guide for sammenligning av primærnøkkel
https://www.itsvse.com/thread-10605-1-1.html

Database GUID-verdi

Globale unike identifikatorer (GUID) datatyper i SQL Server representeres av datatyperUnikidentifikator, som lagrer en 16-byte binær verdi. En GUID er et binært tall hvis hovedformål er å være en identifikator som må være unik i et nettverk med mange datamaskiner på mange steder.

Både Guid og SqlGuid har måter å sammenligne ulike GUID-verdier på. SqlGuid-implementasjonen bruker SQL Server-oppførsel,De siste seks bytene av verdien er de viktigste

Sekvensielle GUID-er er iboende gjettelige, så ikke bruk dem i sikkerhetssensitive sammenhenger

Referanse:Innloggingen med hyperkoblingen er synlig.

Databasen er ordnet av GUID

SQL Server-databasen har en slikNewSequentialId()funksjon for å lage en ordnet GUID. Når du lager en tabell, kan du sette den som standardverdi for et GUID-type felt, og automatisk lage verdien av primærnøkkelen når du setter inn nye data (denne funksjonen kan kun brukes som standardverdien for feltet, ikke direkte kalles i SQL).

Eksempel:

NewSequentialId()-funksjonen kan kun brukes i databaser, selv om Microsofts MSDN-dokumentasjon oppgir at NEWSEQUENTIALID er en wrapper for Windows UuidCreateSequential-funksjonen.

Tips: Ikke bruk funksjonen hvis det gjelder konfidensialitet. FordiDet er mulig å gjette verdien av neste genererte GUIDfor å få tilgang til dataene knyttet til den GUID-en.

Referanse:Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.

.NET lager en ordnet GUID

UuidCreateSequential-funksjonen avhenger av metodens beregningsmaskinvareDe siste 12 bitene er faktisk MAC-adressen til nettverkskortet

Koden er som følger:

Resultatene er som følger:



Brist:

  • Denne metoden krever at DllImport kaller Windows-biblioteket, så det er ikke plattformuavhengig.
  • Den kan ikke brukes i et klyngemiljø, hvor flere maskiner skriver til samme database fordi de resulterende GUID-ene vil være forskjellige fra hverandre (funksjonsavhengig maskinvare), noe som resulterer i indeksfragmentering.
  • Hvis Windows-serveren starter på nytt, kan GUID-en starte i et lavere område, noe som resulterer i indeksfragmentering.

Referanse:

Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.

Hvis du bruker et .NET-program for å lage en SQL SERVER-ordnet GUID, anbefales det å bruke et tredjeparts klassebibliotek:RT. Kam, Nuget-kommandoen er som følger:


Koden er som følger:

Ytelse:



Referanse:Innloggingen med hyperkoblingen er synlig.

Ordnede og uordnede GUID-primærnøkkelindeksfragmenter

Start med å lage to tabeller med følgende skript:

Testen legger inn 100 000 databiter, og koden er som følger:

Testresultatene er som følger:

GUIDTid brukt (ms)Skanningstetthet [Beste antall: Faktisk antall], jo høyere verdi, desto bedreLogisk skanningsfragmentering, jo lavere verdi, desto bedreGjennomsnittlig sidetetthet (full) (gjennomsnittlig Sidetetthet (full), jo høyere verdi, desto bedre
Uordnet GUID 1336712.58% [61:485]98.97%63.66%
Ordre GUID 14139100.00% [39:39]0.32%99.61%





Testen setter inn 1 million databiter igjen, med en GUID ute av rekkefølge som tar 135203 ms og en ordinert GUID som tar 135134 ms. Lagringsplassen er som følger:

Uordnet GUID: 36,547 MB
Bestilt GUID: 26,609 MB



Referanse:Innloggingen med hyperkoblingen er synlig.


(Slutt)




Foregående:.NET Core-programmets flerspråklige lese- og skriveressursfiler (.resx)
Neste:.NET/C# optimalisering for minneminne for stream read diskfiler
 Vert| Publisert på 27.01.2024 11:07:12 |
ABP lager en ordnet GUID for SQL Server-databasen, kildekoden er som følger:



 Vert| Publisert på 24.03.2024 11:43:45 |
EF Core genererer en ordnet GUID-kode:





Innloggingen med hyperkoblingen er synlig.

 Vert| Publisert på 11.04.2024 15:00:11 |
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com