Krav: När man använder GUID som primära nyckelaggregationsindex rekommenderas det att använda ordnade GUID, eftersom oordnade GUID:er leder till slöseri med utrymme och därmed minskad läs- och skriveffektivitet.
Recension:
Databasens GUID-värde
Globalt unika identifierare (GUID)-datatyper i SQL Server representeras av datatyperUnikidentifierare, som lagrar ett binärt värde på 16 byte. En GUID är ett binärt nummer vars huvudsakliga syfte är att fungera som en identifierare som måste vara unik i ett nätverk med många datorer på många platser.
Både Guid och SqlGuid har sätt att jämföra olika GUID-värden. SqlGuid-implementeringen använder SQL Server-beteende,De sista sex bytena av värdet är de viktigaste。
Sekventiella GUID:er är i grunden gissningsbara, så använd dem inte i säkerhetskänsliga sammanhang。
Hänvisning:Inloggningen med hyperlänken är synlig.
Databasen ordnas enligt GUID
SQL Server-databasen har en sådanNewSequentialId()funktionen för att skapa en ordnad GUID. När du skapar en tabell kan du ställa in den som standardvärde för ett GUID-typfält och automatiskt skapa primärnyckelns värde när ny data infogas (denna funktion kan endast användas som standardvärde för fältet, inte direkt anropas i SQL).
Exempel:
Funktionen NewSequentialId() kan endast användas i databaser, även om Microsofts MSDN-dokumentation anger att NEWSEQUENTIALID är en wrapper för Windows UuidCreateSequential-funktionen.
Tips: Använd inte funktionen om det handlar om sekretess. EftersomDet är möjligt att gissa värdet på nästa genererade GUIDför att få tillgång till data kopplad till den GUID:en.
Hänvisning:Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
.NET skapar en ordnad GUID
Funktionen UuidCreateSequential beror på metodens beräkningshårdvaraDe sista 12 bitarna är faktiskt nätverkskortets MAC-adress。
Koden är följande:
Resultaten är följande:
Brist:
- Denna metod kräver att DllImport anropar Windows-biblioteket, så det är inte plattformsoberört.
- Den kan inte användas i en klustret miljö där flera maskiner skriver till samma databas eftersom de resulterande GUID:erna kommer att skilja sig från varandra (funktionsberoende datorhårdvara), vilket leder till indexfragmentering.
- Om din Windows-server startar om kan GUID:en starta i ett lägre intervall, vilket resulterar i indexfragmentering.
Hänvisning:
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
Om du använder ett .NET-program för att skapa en SQL SERVER-ordnad GUID rekommenderas det att använda ett tredjepartsklassbibliotek:RT. Kam, Nuget-kommandot är följande:
Koden är följande:
Utdata:
Hänvisning:Inloggningen med hyperlänken är synlig.
Ordnade och oordnade GUID-primärnyckelindexfragment
Börja med att skapa två tabeller med följande skript:
Testet infogar 100 000 data, och koden är följande:
Testresultaten är följande:
| GUID | Tidsåtsatt (ms) | Skanningstäthet [Bästa antal: Faktisk antal], ju högre värde, desto bättre | Logisk skanningsfragmentering, ju lägre värde, desto bättre | Genomsnittlig sidtäthet (full) (Genomsnitt Sidtäthet (full), ju högre värde, desto bättre | | Oordnad GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Order GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Testet lägger in 1 miljon databitar igen, med en GUID i oordning som tar 135203 ms och en ordinerad GUID som tar 135134 ms. Lagringsutrymmets beläggning är följande:
Oordnad GUID: 36,547 MB Beställd GUID: 26,609 MB
Hänvisning:Inloggningen med hyperlänken är synlig.
(Slut)
|