Veritabanı tasarımında genellikle ana anahtar olarak guid veya int kullanırız ve öğrendiğimiz bilgilere göre, int'nin ana anahtar olarak daha verimli olduğunu her zaman düşündük, ancak dikkatli test olmadan bu imkansız
Nedenini açıklayın. Bugün veritabanının optimizasyonu sırasında bu sorunla karşılaştım, bu yüzden bir test yaptım.
Test Ortamı:
Masaüstü PC Pentiun(R) 4 CPU 3.06GHz Win XP profesyonel 1.5G DDR RAM SQL Server 2005 Personal
Test Süreci:
Öncelikle, bir test veritabanı oluşturun, Test
Test sonuçları aşağıdaki gibidir:
Yukarıda belirtildiği gibi, int ana anahtar olarak kullanmanın verimliliği, özellikle bağlantı sorgusu ve kayıtların silinmesi durumunda, ana anahtar olarak guid kullanımına kıyasla daha iyidir.
Ayrıca, bugün GUID'deki ana anahtarla veri sorgusunda, birkaç alt sorgu sonucunun iç içe geçmesi nedeniyle sorgu zamanlaması tekrar tekrar meydana geldi. Bu nedenle, int ana anahtar olarak kullanılmasından yanayım ve guid'in ana anahtar olarak kullanılmasına katılmıyorum. Yukarıdaki görüşler kişisel görüşleri temsil eder ve herkes görüşlerini ifade edebilir ve ana anahtar olarak yönlendirme ve zekanın avantajlarını ve dezavantajlarını açıklamaya davetlidir.
Takip testleri:
Kardeşlerin hatırlatmalarından sonra, bugün iki alt tabloya kümelenmiş olmayan bir indeks eklenmiştir:
Test_Guid_Detail(Guid) üzerinde kümelenmemiş İNDEKS Index_Detail_Guid OLUŞTUR Test_Int_Detail(id) ÜZERINDE KÜMELENMEMIŞ İNDEKS Index_Detail_id OLUŞTUR Sonra dahili bağlantı sorgusu yaptım ve @Xu Shaoxia'nın dediği gibi, verimlilik gerçekten %50'den fazlasını gösterecek kadar belirgin değil, temelde sadece %23 civarında iyileşme olduğunu ve bunun hâlâ kabul edilebilir olduğunu gördüm.
Bu nedenle, tavsiye edilir
1. Veri taşıması gereken sistemlerde Guid kullanılması önerilir. Ve ilgili yabancı anahtar alanlara, yani birleştirme sorguları için kullanılan alanlara kümelenmiş olmayan indeksler eklemek, performansı artırmak için büyük fayda sağlar. Where koşulu alanı, kümelenmemiş indeksler için uygun şekilde eklenebilir.
2. Guid tipi birincil anahtar olarak kullanılırken, veri tipi uniqueidentifier olmalı ve birincil anahtarın "aggregate index"ini iptal etmeyi unutman.
3. Taşınması gerekmeyen sistemler veya küçük sistemler için, int birincil anahtar olarak kullanmak hâlâ çok kullanışlıdır ve verimlilikte hâlâ belli bir iyileşme vardır.
|