Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 3914|Odpowiedź: 3

[Źródło] [MSSQL] SQL SERVER uporządkował GUIDy i nieuporządkowane GUIDy jako testy agregacji kluczy głównych

[Skopiuj link]
Opublikowano 08.06.2023 21:12:26 | | | |
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:

Fragmentacja indeksu zoptymalizowana pod względem wydajności SQL Server
https://www.itsvse.com/thread-9508-1-1.html

[Obrót] (MSSQL) SQL Server database int and guid do porównania kluczy głównych
https://www.itsvse.com/thread-10605-1-1.html

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:

GUIDCzas zużyty (ms)Gęstość skanowania [Najlepsza liczba: Rzeczywista liczba], im wyższa wartość, tym lepiejFragmentacja 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 1336712.58% [61:485]98.97%63.66%
Order GUID 14139100.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)




Poprzedni:.NET Core program wielojęzyczne pliki zasobów do odczytu i zapisu (.resx)
Następny:.NET/C# Optymalizacja pamięci plików dysku do odczytu strumienia
 Ziemianin| Opublikowano 27.01.2024 11:07:12 |
ABP tworzy uporządkowany GUID dla bazy danych SQL Server, a kod źródłowy wygląda następująco:



 Ziemianin| Opublikowano 24.03.2024 11:43:45 |
EF Core generuje uporządkowany kod GUID:





Logowanie do linku jest widoczne.

 Ziemianin| Opublikowano 11.04.2024 15:00:11 |
MySQL generuje uporządkowany GUID:Logowanie do linku jest widoczne.



Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com