Požiadavky: Pri používaní GUID ako indexov agregácie primárnych kľúčov sa odporúča používať usporiadané GUID, pretože neusporiadané GUID spôsobujú plytvanie miestom a následné zníženie efektivity čítania a zápisu.
Revízia:
Hodnota GUID databázy
Globálne jedinečné identifikátory (GUID) dátové typy v SQL Serveri sú reprezentované dátovými typmiuniqueidentifier, ktorá ukladá 16-bajtovú binárnu hodnotu. GUID je binárne číslo, ktorého hlavným účelom je identifikátor, ktorý musí byť jedinečný v sieti s mnohými počítačmi na viacerých lokalitách.
Guid aj SqlGuid majú spôsoby, ako porovnávať rôzne hodnoty GUID. Implementácia SqlGuid využíva správanie SQL Servera,Posledných šesť bajtov hodnoty je najdôležitejších。
Sekvenčné GUID sú prirodzene hádateľné, preto ich nepoužívajte v bezpečnostne citlivých kontextoch。
Referencia:Prihlásenie na hypertextový odkaz je viditeľné.
Databáza je usporiadaná podľa GUID
Databáza SQL Server má jedenNewSequentialId()funkcie na vytvorenie usporiadaného GUID. Pri vytváraní tabuľky ju môžete nastaviť ako predvolenú hodnotu poľa typu GUID a automaticky vytvoriť hodnotu primárneho kľúča pri vkladaní nových údajov (túto funkciu možno použiť len ako predvolenú hodnotu poľa, nie priamo volanú v SQL).
Príklad:
Funkcia NewSequentialId() sa dá použiť iba v databázach, hoci dokumentácia Microsoft MSDN uvádza, že NEWSEQUENTIALID je obal pre funkciu Windows UuidCreateSequential (UuidCreateSequential vo Windows).
Tip: Nepoužívajte túto funkciu, ak ide o dôvernosť. LeboJe možné odhadnúť hodnotu ďalšieho vygenerovaného GUIDna prístup k údajom spojeným s týmto GUID.
Referencia:Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
.NET vytvára usporiadaný GUID
Funkcia UuidCreateSequential závisí od výpočtového hardvéru metódyPosledných 12 bitov je v skutočnosti MAC adresa sieťovej karty。
Kód je nasledovný:
Výsledky sú nasledovné:
Nedostatok:
- Táto metóda vyžaduje, aby DllImport volal knižnicu Windows, takže nie je multiplatformová.
- Nedá sa použiť v zhlukovanom prostredí, kde viaceré stroje zapisujú do tej istej databázy, pretože výsledné GUID budú odlišné (hardvér závislý od funkcií), čo vedie k fragmentácii indexu.
- Ak sa váš Windows server reštartuje, GUID môže začať na nižšom rozsahu, čo vedie k fragmentácii indexu.
Referencia:
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Ak používate .NET program na vytvorenie SQL SERVER poradeného GUID, odporúča sa použiť knižnicu triedy tretej strany:RT. Hrebeň, príkaz nuget je nasledovný:
Kód je nasledovný:
Výstup:
Referencia:Prihlásenie na hypertextový odkaz je viditeľné.
Usporiadané a neusporiadané fragmenty indexu primárneho kľúča GUID
Začnite vytvorením dvoch tabuliek pomocou nasledujúceho skriptu:
Test vloží 100 000 dát a kód je nasledovný:
Výsledky testov sú nasledovné:
| GUID | Čas spotrebovaný (ms) | Hustota skenovania [Najlepší spočet: skutočný počet], čím vyššia hodnota, tým lepšie | Fragmentácia logického skenu, čím nižšia hodnota, tým lepšie | Priemerná hustota stránky (plná) (Priemer Hustota stránky (plná), čím vyššia hodnota, tým lepšie | | Neusporiadaný GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Poradie GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Test opäť vkladá 1 milión dát, pričom GUID mimo poradia trvá 135203 ms a ordinovaný GUID 135134 ms. Obsadenosť skladovacích priestorov je nasledovná:
Neusporiadané GUID: 36,547 MB Objednané GUID: 26,609 MB
Referencia:Prihlásenie na hypertextový odkaz je viditeľné.
(Koniec)
|