Požadavky: Při použití GUID jako indexů agregace primárních klíčů se doporučuje používat uspořádané GUID, protože neuspořádané GUID způsobí plýtvání místem a následné snížení efektivity čtení a zápisu.
Přezkoumání:
Hodnota GUID databáze
Globálně unikátní identifikátorové (GUID) datové typy v SQL Serveru jsou reprezentovány datovými typyuniqueidentifier, která ukládá 16bajtovou binární hodnotu. GUID je binární číslo, jehož hlavním účelem je identifikátor jenž musí být jedinečný v síti s mnoha počítači na mnoha místech.
Oba programy, Guid, i SqlGuid, mají způsoby, jak porovnat různé hodnoty GUID. Implementace SqlGuid využívá chování SQL Serveru,Posledních šest bajtů hodnoty je nejdůležitějších。
Sekvenční GUIDy jsou ze své podstaty odhadovatelné, takže je nepoužívejte v bezpečnostně citlivých kontextech。
Odkaz:Přihlášení k hypertextovému odkazu je viditelné.
Databáze je uspořádána podle GUID
Databáze SQL Server ji máNewSequentialId()funkce pro vytvoření uspořádaného GUID. Při vytváření tabulky ji můžete nastavit jako výchozí hodnotu pole typu GUID a automaticky vytvořit hodnotu primárního klíče při vložení nových dat (tuto funkci lze použít pouze jako výchozí hodnotu pole, není přímo volána v SQL).
Příklad:
Funkci NewSequentialId() lze použít pouze v databázích, ačkoli Microsoftova MSDN dokumentace uvádí, že NEWSEQUENTIALID je obal pro funkci Windows UuidCreateSequential (UuidCreateSequential ve Windows).
Tip: Nepoužívejte tuto funkci, pokud jde o důvěrnost. ProtožeJe možné odhadnout hodnotu dalšího generovaného GUIDaby se přístup k datům spojeným s tímto GUID.
Odkaz:Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
.NET vytváří uspořádaný GUID
Funkce UuidCreateSequential závisí na výpočetním hardwaru metodyPosledních 12 bitů je ve skutečnosti MAC adresa síťové karty。
Kód je následující:
Výsledky jsou následující:
Nedostatek:
- Tato metoda vyžaduje, aby DllImport volal knihovnu Windows, takže není multiplatformní.
- Nelze jej použít v clusterovaném prostředí, kde více strojů zapisuje do stejné databáze, protože výsledné GUID budou od sebe odlišné (hardware závislý na funkci), což vede k fragmentaci indexu.
- Pokud se váš Windows server restartuje, GUID může začít na nižším rozsahu, což vede k fragmentaci indexu.
Odkaz:
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
Pokud používáte .NET program k vytvoření GUID pořadého SQL SERVER, doporučuje se použít knihovnu tříd třetí strany:RT. Hřeben, příkaz nuget je následující:
Kód je následující:
Výstup:
Odkaz:Přihlášení k hypertextovému odkazu je viditelné.
Uspořádané a neuspořádané fragmenty indexu primárního klíče GUID
Začněte vytvořením dvou tabulek pomocí následujícího skriptu:
Test vloží 100 000 datových částí a kód je následující:
Výsledky testu jsou následující:
| Identifikátor guid | Čas spotřebovaný (ms) | Hustota skenování [Nejlepší počet: skutečný počet], čím vyšší hodnota, tím lepší | Fragmentace logického skenu, čím nižší hodnota, tím lepší | Průměrná hustota stránky (plná) (Průměr Hustota stránky (plná), čím vyšší hodnota, tím lepší | | Neuspořádané GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Order GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Test opět vloží 1 milion dat, přičemž GUID mimo pořadí trvá 135203 ms, a upravený GUID 135134 ms. Obsazenost úložného prostoru je následující:
Neuspořádaný GUID: 36,547 MB Objednané GUID: 26,609 MB
Odkaz:Přihlášení k hypertextovému odkazu je viditelné.
(Konec)
|