Wymagania: Przy używaniu GUID jako indeksów agregacji kluczy głównych zaleca się stosowanie uporządkowanych GUID, ponieważ nieuporządkowane GUID powodują marnotrawstwo miejsca i spadek efektywności odczytu i zapisu.
Recenzja:
Wartość GUID bazy danych
Globalnie unikalne identyfikatory (GUID) w SQL Server są reprezentowane przez typy danychuniqueidentifier, który przechowuje wartość binarną o pojemności 16 bajtów. GUID to numer binarny, którego głównym celem jest identyfikacja, która musi być unikalna w sieci z wieloma komputerami na wielu lokalizacjach.
Zarówno Guid, jak i SqlGuid mają sposoby porównywania różnych wartości GUID. Implementacja SqlGuid wykorzystuje zachowanie SQL Server,Ostatnie sześć bajtów wartości jest najważniejsze。
Sekwencyjne GUIDy są z natury łatwe do odgadywania, więc nie używaj ich w kontekstach wrażliwych na bezpieczeństwo。
Odniesienie:Logowanie do linku jest widoczne.
Baza danych jest uporządkowana według GUID
Baza danych SQL Server posiada takiNewSequentialId()funkcja do utworzenia uporządkowanego GUID. Tworząc tabelę, możesz ustawić ją jako domyślną wartość pola typu GUID i automatycznie tworzyć wartość klucza głównego przy wstawianiu nowych danych (funkcja ta może być używana tylko jako wartość domyślna, nie wywoływana bezpośrednio w SQL).
Przykład:
Funkcję NewSequentialId() można używać tylko w bazach danych, chociaż dokumentacja Microsoftu MSDN podaje, że NEWSEQUENTIALID jest opakowaniem funkcji Windows UuidCreateSequential (otoczenie dla funkcji UuidCreateSequential w Windows).
Wskazówka: Nie używaj tej funkcji, jeśli to kwestia poufności. PonieważMożna zgadnąć wartość następnego wygenerowanego GUIDaby uzyskać dostęp do danych powiązanych z tym GUID.
Odniesienie:Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
.NET tworzy uporządkowany GUID
Funkcja UuidCreateSequential zależy od sprzętu obliczeniowego danej metodyOstatnie 12 bitów to w rzeczywistości adres MAC karty sieciowej。
Kod jest następujący:
Wyniki są następujące:
Niedociągnięcie:
- Ta metoda wymaga DllImport do wywołania biblioteki Windows, więc nie jest wieloplatformowa.
- Nie może być używany w środowisku klastrowym, gdzie wiele maszyn zapisuje do tej samej bazy danych, ponieważ powstałe GUIDy będą się różnić (sprzęt komputerowy zależny od funkcji), co prowadzi do fragmentacji indeksu.
- Jeśli serwer Windows się zrestartuje, GUID może zacząć się od niższego zakresu, co prowadzi do fragmentacji indeksu.
Odniesienie:
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Jeśli używasz programu .NET do tworzenia GUID w kolejności SQL SERVER, zaleca się korzystanie z zewnętrznej biblioteki klas:RT. Grzebień, polecenie nuget wygląda następująco:
Kod jest następujący:
Wyjście:
Odniesienie:Logowanie do linku jest widoczne.
Uporządkowane i nieuporządkowane fragmenty indeksu klucza podstawowego GUID
Zacznij od stworzenia dwóch tabel za pomocą następującego skryptu:
Test wprowadza 100 000 fragmentów danych, a kod wygląda następująco:
Wyniki testów są następujące:
| GUID | Czas zużyty (ms) | Gęstość skanowania [Najlepsza liczba: Rzeczywista liczba], im wyższa wartość, tym lepiej | Fragmentacja skanowania logicznego, im niższa wartość, tym lepiej | Średnia gęstość strony (pełna) (Średnia Gęstość strony (pełna), im wyższa wartość, tym lepiej | | Nieuporządkowany GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Order GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Test ponownie wprowadza 1 milion danych, przy czym GUID poza kolejnością zajmuje 135203 ms, a zrzędzony GUID 135134 ms. Zajmowanie przestrzeni magazynowej jest następujące:
Nieuporządkowany GUID: 36,547 MB Zamówiony GUID: 26,609 MB
Odniesienie:Logowanie do linku jest widoczne.
(Koniec)
|