'PK ne zaman NC olmalıdır' sorusu değil, bunun yerine 'kümelenmiş dizin için uygun anahtarın ne olduğunu' sormalısınız.
Ve cevap gerçekten verileri nasıl sorguladığınıza bağlı . Kümelenmiş indeks, diğer tüm indekslere göre bir avantaja sahiptir: her zaman tüm sütunları içerdiğinden, her zaman kapsar. Bu nedenle, kümelenmiş dizini kaldırabilecek sorguların, yansıtılan sütunların ve / veya tahminlerin bir kısmını karşılamak için kesinlikle arama kullanmasına gerek yoktur.
Bulmacanın bir başka parçası da bir endeksin nasıl kullanılabileceği ? Üç tipik kalıp vardır:
- Sonda, endekste tek bir anahtar değer arandığında
- aralık, bir anahtar değer aralığı alındığında tarar
- Bir endeks, dur-kalk sıralama gerektirmeksizin bir siparişi karşılayabildiğinde gereksinimlere göre sırala
Öyleyse, beklenen yükünüzü (sorgular) analiz ederseniz ve çok sayıda sorgunun belirli bir dizini kullanacağını keşfederseniz, bir dizinden yararlanan belirli bir erişim kalıbı kullanırlarsa, o dizini kümelenmiş dizin olarak önermek mantıklı olur.
Diğer bir faktör, kümelenmiş indeks anahtarının kümelenmemiş tüm indekslerin kullandığı arama anahtarı olmasıdır ve bu nedenle geniş bir kümelenmiş indeks anahtarının bir dalgalanma efekti yaratması ve kümelenmemiş tüm indekslerin genişlemesi ve geniş endekslerin daha fazla sayfa, daha fazla I / O olması , daha fazla hafıza, daha az iyilik.
İyi bir kümelenmiş indeks sabittir , kümelenmiş indeks anahtar değerlerinde bir değişiklik olması durumunda satırın silinmesi ve geri eklenmesi gerektiği anlamına gelir.
Ve iyi bir kümelenmiş indeks, sayfa bölünmelerini ve parçalanmayı ( FILLFACTOR
s ile karıştırmadan) önlemek için rastgele olmayan (her yeni eklenen anahtar değer bir önceki değerden daha büyüktür) sırayla büyür .
Şimdi iyi bir kümelenmiş indeks anahtarının ne olduğunu bildiğimize göre, birincil anahtar (bir veri modelleme mantıksal özelliği olan) gereksinimlere uygun mu? Eğer evet ise, PK kümelenmelidir. Hayır ise, PK kümelenmemiş olmalıdır.
Bir örnek vermek gerekirse, bir satış gerçekleri tablosu düşünün. Her giriş, birincil anahtar olan bir kimliğe sahiptir. Ancak, sorguların büyük çoğunluğu bir tarih ile başka bir tarih arasında veri ister, bu nedenle en iyi kümelenmiş endeks anahtarı kimlik numarası değil satış tarihi olacaktır . Birincil anahtardan farklı kümelenmiş bir dizine sahip olmanın bir başka örneği, bir 'kategori' veya 'durum' gibi çok düşük bir seçicilik anahtarıdır, sadece çok az belirgin değere sahip bir anahtardır. En düşük anahtar olan bu düşük seçicilik anahtarına sahip kümelenmiş bir indeks anahtarına sahip olmak, örneğin , belirli bir 'durumdaki' tüm girişleri arayan aralıklar taramaları nedeniyle genellikle anlamlıdır.(state, id)
Bir öbek üzerinde kümelenmemiş bir birincil anahtarın olasılığı hakkında son bir not (yani, kümelenmiş bir dizin yoktur). Bu geçerli bir senaryo olabilir, tipik neden, yığın ekleme performansının kritik olmasıdır, çünkü yığınlar kümelenmiş endekslere kıyasla önemli ölçüde daha iyi yığın ekleme performansı sağlar.