Öncelikle, Dizinle Düzenlenmiş Tablolara ve Kümelenmiş Dizinlere bir göz atın . Aslında, Dizini Kullan Luke! neler olup bittiğini gerçekten anlamak için baştan kümeleme konusuna ulaşıncaya kadar site.
Şimdi sorularınıza ...
Bir TABLO, Kümelenmiş Dizin olmadan birincil anahtara sahip olabilir mi?
Evet, yığın tabanlı bir tablo oluşturmak için birincil anahtarınızı bildirirken NONCLUSTERED anahtar sözcüğünü kullanın. Örneğin:
CREATE TABLE YOUR_TABLE (
YOUR_PK int PRIMARY KEY NONCLUSTERED
);
Bu talihsiz bir durumdur, çünkü pek çok kişi varsayılanı (KÜMELENMİŞTİR) kabul ediyor gibi görünmektedir, ancak çoğu durumda yığın tabanlı bir tablo aslında daha iyi olacaktır (bağlantılı makalede tartışıldığı gibi).
ve TABLO, birincil anahtar olmadan Kümelenmiş Dizine sahip olabilir mi?
Diğer bazı DBMS'lerden farklı olarak, MS SQL Server, birincil anahtardan farklı veya hatta birincil anahtara sahip olmadan bile bir kümeleme indeksine sahip olmanıza izin verecektir.
Aşağıdaki örnek, PK'den ayrı bir kümeleme dizini oluşturur ve bunun üzerinde UNIQUE kısıtlaması vardır ve çoğu durumda muhtemelen isteyeceğiniz şey budur:
CREATE TABLE YOUR_TABLE (
YOUR_PK int PRIMARY KEY,
YOUR_CLUSTERED_KEY int NOT NULL UNIQUE CLUSTERED
);
Benzersiz olmayan bir kümeleme dizini seçerseniz (kullanarak CREATE CLUSTERED INDEX ...
), MS SQL Server gizli bir alan ekleyerek onu otomatik olarak benzersiz kılacaktır.
Lütfen kümelemenin faydalarının en çok menzil taramalarında görünür olduğunu unutmayın. İstemci uygulamalarınız tarafından yapılan aralık taramalarıyla "hizalanmayan" bir kümeleme dizini kullanıyorsanız (yukarıda bahsedilen gizli sütuna aşırı güvenirken veya bir vekil anahtarında kümeleme yaparken ), hemen hemen kümeleme amacını bozmak.
Biri bana kısaca birincil anahtar ile kümelenmiş dizin arasındaki ilişkiyi söyleyebilir mi?
MS SQL Server altında, birincil anahtar da varsayılan olarak kümelenmiştir . Yukarıda tartışıldığı gibi bu varsayılanı değiştirebilirsiniz.