Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 3914|Yanıt: 3

[Kaynak] [MSSQL] SQL SERVER, birincil anahtar toplama endeks testleri olarak sıralanmış GUID'ler ve sıralanmamış GUID'ler

[Bağlantıyı kopyala]
Yayınlandı 8.06.2023 21:12:26 | | | |
Gereksinimler: GUID'ler birincil anahtar toplama indeksleri olarak kullanılırken, sıralanmamış GUID'ler alan israfına ve okuma ile yazma verimliliğinin düşmesine yol açacağı için sıralı GUID'lerin kullanılması önerilir.

Eleştiri:

SQL Server performans optimize edilmiş indeks parçalanması
https://www.itsvse.com/thread-9508-1-1.html

[Dönüş] (MSSQL) SQL Server veritabanı int ve birincil anahtar karşılaştırması için yönlendirme
https://www.itsvse.com/thread-10605-1-1.html

Veritabanı GUID değeri

SQL Server'daki Küresel Benzersiz Tanımlayıcı (GUID) veri tipleri veri tipleriyle temsil ediliruniqueidentifier, bu da 16 baytlık ikili değer depolar. GUID, ana amacı birçok sayıda bilgisayarın bulunduğu bir ağda benzersiz olması gereken bir tanımlayıcı olarak tanımlanan ikili bir sayıdır.

Hem Guid hem de SqlGuid, farklı GUID değerlerini karşılaştırma yolları sunuyor. SqlGuid uygulaması SQL Server davranışını kullanır,Değerin son altı baytı en önemlisidir

Ardışık GUID'ler doğası gereği tahmin edilebilir, bu yüzden güvenlik açısından hassas bağlamlarda kullanmayın

Referans:Bağlantı girişi görünür.

Veritabanı GUID tarafından sıralanır

SQL Server veritabanında bir tane vardırNewSequentialId()işlevi için düzenlenmiş bir GUID oluşturabilir. Bir tablo oluştururken, bunu bir GUID tür alanının varsayılan değeri olarak ayarlayabilir ve yeni veri eklendiğinde otomatik olarak birincil anahtarın değerini oluşturabilirsiniz (bu fonksiyon yalnızca alanın varsayılan değeri olarak kullanılabilir, SQL'de doğrudan çağrılmaz).

Örnek:

NewSequentialId() fonksiyonu yalnızca veritabanlarında kullanılabilir, ancak Microsoft'un MSDN dokümantasyonu NEWSEQUENTIALID'in Windows UuidCreateSequential fonksiyonu için bir wrapper olduğunu belirtir.

İpucu: Gizlilik meselesiyse bu fonksiyonu kullanma. ÇünküBir sonraki oluşturulan GUID'nin değerini tahmin etmek mümkündüro GUID ile ilişkili verilere erişmek için.

Referans:Bağlantı girişi görünür.
Bağlantı girişi görünür.

.NET, sıralı bir GUID oluşturur

UuidCreateSequential fonksiyonu, yöntemin hesaplama donanımına bağlıdırSon 12 bit aslında ağ kartının MAC adresidir

Kod şöyledir:

Sonuçlar şu şekildedir:



Eksiklik:

  • Bu yöntem, Windows kütüphanesini çağırmak için DllImport'u gerektirir, bu yüzden platformlar arası değildir.
  • Aynı veritabanına birden fazla makinenin yazdığı kümelenmiş ortamda kullanılamaz; çünkü ortaya çıkan GUID'ler birbirinden farklı olur (fonksiyona bağlı hesaplama donanımı), bu da indeks parçalanmasına yol açar.
  • Windows sunucunuz yeniden başlatılırsa, GUID daha düşük bir aralıkta başlayabilir ve bu da indeks parçalanmasına yol açabilir.

Referans:

Bağlantı girişi görünür.
Bağlantı girişi görünür.

Eğer .NET programı kullanarak SQL SERVER sıralı bir GUID oluşturuyorsanız, üçüncü taraf sınıf kütüphanesi kullanmanız önerilir:RT. Tarak, nuget komutu şöyledir:


Kod şöyledir:

Çıktı:



Referans:Bağlantı girişi görünür.

Sıralı ve sıralanmamış GUID birincil anahtar indeks parçaları

Aşağıdaki betikle iki tablo oluşturarak başlayın:

Test 100.000 veri parçası ekler ve kod şu şekildedir:

Test sonuçları aşağıdaki gibidir:

GUIDTüketilen Zaman (MS)Tarama Yoğunluğu [En İyi Sayı: Gerçek Sayı], değer ne kadar yüksekse o kadar iyiMantıksal Tarama Parçalanması, değer ne kadar düşükse, o kadar iyiOrtalama sayfa yoğunluğu (tam) (Ortala. Sayfa yoğunluğu (dolu), değer ne kadar yüksekse, o kadar iyi
Düzenlenmemiş GUID 1336712.58% [61:485]98.97%63.66%
GUID siparişi 14139100.00% [39:39]0.32%99.61%





Test tekrar 1 milyon veri parçası ekliyor; sırasız bir GUID 135203 ms alırken, belirlenmiş bir GUID 135134 ms alıyor. Depolama alanı doluluğu aşağıdaki gibidir:

Sıralanmamış GUID: 36.547 MB
Sipariş edilen GUID: 26.609 MB



Referans:Bağlantı girişi görünür.


(Son)




Önceki:.NET Core programı çok dilli okuma ve yazma kaynak (.resx) dosyaları
Önümüzdeki:.NET/C# Stream Read disk dosya belleği optimizasyonu
 Ev sahibi| Yayınlandı 27.01.2024 11:07:12 |
ABP, sql sunucu veritabanı için düzenli bir GUID oluşturur, kaynak kodu şu şekildedir:



 Ev sahibi| Yayınlandı 24.03.2024 11:43:45 |
EF Core, sıralı bir GUID kodu oluşturur:





Bağlantı girişi görünür.

 Ev sahibi| Yayınlandı 11.04.2024 15:00:11 |
MySQL sıralı bir GUID oluşturur:Bağlantı girişi görünür.



Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com