clustered
ve non-clustered index
arasındaki farklar nelerdir?
Kümelenmiş Dizin
Kümelenmemiş Dizin
Her iki dizin türü, dizini kullanan alanlarla veri seçildiğinde performansı artırır ancak güncelleme ve ekleme işlemlerini yavaşlatır.
Daha yavaş ekleme ve güncelleme nedeniyle kümelenmiş dizinler normalde artan olan bir alanda yani Id veya Timestamp olarak ayarlanmalıdır.
SQL Server normalde seçiciliği% 95'in üzerindeyse yalnızca bir dizin kullanır.
Kümelenmiş dizinler fiziksel olarak diskteki verileri sıralar. Bu, dizin için ek veriye gerek olmadığı anlamına gelir, ancak yalnızca bir kümelenmiş dizin olabilir (açıkçası). Kümelenmiş bir dizin kullanarak verilere erişmek en hızlısıdır.
Diğer tüm dizinler kümelenmemiş olmalıdır. Kümelenmemiş bir dizin, işaretçilerle birlikte sıralı olarak tutulan dizine alınmış sütunlardan gerçek veri satırlarına (varsa, kümelenmiş dizine işaretçiler) ait verilerin bir kopyasına sahiptir. Bu, kümelenmemiş bir dizin aracılığıyla verilere erişmenin, fazladan bir dolaylı katmandan geçmesi gerektiği anlamına gelir. Ancak, yalnızca dizine alınmış sütunlarda bulunan verileri seçerseniz, verileri doğrudan kopyalanan dizin verilerinden geri alabilirsiniz (bu nedenle, yalnızca ihtiyacınız olan ve kullanmadığınız sütunları SEÇMEK iyi bir fikirdir *)
Kümelenmiş dizinler fiziksel olarak masaya depolanır. Bu, en hızlı oldukları anlamına gelir ve tablo başına yalnızca bir kümelenmiş dizininiz olabilir.
Kümelenmemiş dizinler ayrı olarak depolanır ve istediğiniz kadar içeriğe sahip olabilirsiniz.
En iyi seçenek, kümelenmiş dizininizi, genellikle PK olan en çok kullanılan benzersiz sütuna ayarlamaktır. Çok zorlayıcı bir neden olmadıkça - tek bir tane düşünemiyorum, ama hey, orada olabilir - böyle yapmadığı için dışarı çıkmış olabilir.
Bu farklılıkların dışında, tablonun kümelenmediği durumlarda (tablonun kümelenmiş bir dizini olmadığında) veri dosyalarının sırasız olduğunu ve veri yapısı olarak Yığın veri yapısını kullandığını bilmeniz gerekir.
Kümelenmiş temelde verilerin tablodaki bu fiziksel düzende olduğu anlamına gelir. Bu yüzden masa başına sadece bir tane alabilirsin.
Kümelenmemiş, "sadece" mantıklı bir düzen olduğu anlamına gelir.
Artıları:
Kümelenmiş dizinler aralıklar için harika çalışır (örneğin, my_table @ my ile @max arasında).
Bazı durumlarda, bir sipariş ifadesi kullanıyorsanız, DBMS'nin sıralama çalışması gerekmeyecektir.
Eksileri:
Kümelenmiş dizinler ekleri yavaşlatabilir çünkü yeni anahtarlar sıralı değilse, kayıtların fiziksel düzenleri kayıtlar konuldukça değiştirilmelidir.
Kümelenmiş bir dizin aslında kayıtların diskte fiziksel olarak depolanma sırasını açıklar, bu nedenle sadece bir taneye sahip olmanızın nedenidir.
Kümelenmemiş Dizin, diskteki fiziksel sıraya uymayan mantıksal bir sıra tanımlar.
Kümelenmiş bir dizin, temelde dizine alınmış sütunlardaki verilerin sıralı bir kopyasıdır.
Kümelenmiş bir dizinin temel avantajı, sorgunuz (arama) dizindeki verileri bulduğunda, o verileri almak için ek IO gerekmemesidir.
Özellikle sıkça güncellenen bir tabloda kümelenmiş bir dizinin tutulmasının ek yükü, düşük performansa neden olabilir ve bu nedenle kümelenmemiş bir dizin oluşturmak tercih edilebilir.
Dizine alınmış bir veritabanı iki bölümden oluşur: bazı rasgele sırada düzenlenmiş bir dizi fiziksel kayıt ve bazı kriterlere göre sıralanmış bir sonuç elde etmek için kayıtların okunması gereken sırayı tanımlayan bir dizi dizi. Fiziksel düzenleme ile indeks arasında korelasyon yoksa, tüm kayıtları sırayla okumak, birçok bağımsız tek kayıt okuma işlemi yapılmasını gerektirebilir. Bir veritabanı, arka arkaya olmayan iki kaydı okumak için gerekenden daha kısa sürede ardışık kayıtları okuyabildiğinden, dizinde ardışık olan kayıtlar da arka arkaya diskte saklanırsa performans artabilir. Bir dizinin kümelenmiş olduğunu belirtmek, veritabanının bazı şeyleri (farklı veritabanlarının ne kadar farklı olduğuna bakılmaksızın) işleri düzenlemesine neden olur; böylece dizinde ardışık olan kayıt grupları diskte ardışık olur.
Örneğin, biri kümelenmemiş boş bir veritabanıyla başlayacak ve rasgele sırayla 10.000 kayıt ekleyecekse, büyük olasılıkla kayıtlar eklendikleri sırayla eklenecektir. Veritabanını dizine göre sırayla okumak, tek bir kayıt için 10.000 okuma gerektirir. Ancak, kümelenmiş bir veritabanı kullanılacaksa, sistem önceki kaydın kendi başına saklanıp saklanmadığını her bir kayıt eklerken kontrol edebilir; bunun böyle olduğunu tespit ederse, bu kaydı veritabanının sonuna yenisiyle yazabilir. Daha sonra, taşınan kayıtların bulunduğu yerlerden önceki fiziksel kayıtlara bakabilir ve ardından gelen kayıtların kendi başına saklanıp saklanmadığını görebilir. Bunun böyle olduğunu tespit ederse, o kaydı o noktaya taşıyabilirdi. Bu tür bir yaklaşımın kullanılması birçok kaydın çiftler halinde gruplanmasına neden olur, bu nedenle potansiyel olarak sıralı okuma hızını neredeyse iki katına çıkarır.
Gerçekte, kümelenmiş veritabanları bundan daha karmaşık algoritmalar kullanır. Ancak dikkat edilmesi gereken en önemli şey, veritabanını güncellemek için gereken zaman ile onu sıralı olarak okumak için gereken zaman arasında bir değişimin olduğudur. Kümelenmiş bir veritabanını korumak, sıralama dizisini etkileyecek şekilde kayıt eklemek, kaldırmak veya güncellemek için gereken iş miktarını önemli ölçüde artıracaktır. Veritabanları, güncellenenden çok daha sık aralıklarla okunursa, kümeleme büyük bir kazanç olabilir. Sık sık güncellenir ancak nadiren sırayla okunursa, kümeleme, özellikle veritabanına öğelerin eklendiği sıra, kümelenmiş dizine göre sıralama düzeninden bağımsızsa, büyük bir performans boşalması olabilir.
Yukarıdaki yazılardan teori kısmına girmiş olabilirsiniz:
- Kümelenmiş Endeks doğrudan kaydetmek için puanları görebildiğimiz için direk olarak yani doğrudan bir arama yapması daha az zaman alır. Ek olarak indeksi saklamak için fazladan hafıza/alan gerektirmez
-Bir kümelenmemiş Dizinde dolaylı olarak kümelenmiş Dizine işaret eder, sonra gerçek kayda erişir, dolaylı doğası nedeniyle erişmek için daha fazla zaman alacağı için dolaylı olarak. dizini sakla
// MSDN'den kopyalanan kümelenmemiş dizinin ikinci noktası diğer cevaplarda açıkça belirtilmemiştir.
Kümelenmiş
Kümelenmemiş