A clustered
ve a arasındaki farklar nelerdir non-clustered index
?
A clustered
ve a arasındaki farklar nelerdir non-clustered index
?
Yanıtlar:
Kümelenmiş Dizin
Kümelenmemiş Dizin
Her iki dizin türü, dizini kullanan alanlara sahip veriler seçildiğinde performansı artıracak, ancak güncelleme ve ekleme işlemlerini yavaşlatacaktır.
Yavaş ekleme ve güncelleme nedeniyle kümelenmiş dizinler, normalde artımlı bir alan, yani Id veya Zaman Damgası olarak ayarlanmalıdır.
SQL Server normalde yalnızca seçiciliği% 95'in üzerindeyse bir dizin kullanır.
Kümelenmiş dizinler diskteki verileri fiziksel olarak sıralar. Bu, dizin için fazladan veriye ihtiyaç olmadığı anlamına gelir, ancak yalnızca bir kümelenmiş dizin olabilir (açıkça). Kümelenmiş bir dizin kullanarak verilere erişmek en hızlı yöntemdir.
Diğer tüm dizinler kümelenmemiş olmalıdır. Kümelenmemiş bir dizin, işaretçilerle birlikte gerçek veri satırlarına (varsa kümelenmiş dizine işaretçiler) birlikte sıralanan dizinlenmiş sütunlardaki 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. Bununla birlikte, yalnızca dizine eklenen sütunlarda bulunan verileri seçerseniz, verileri doğrudan çoğaltılan dizin verilerinden geri alabilirsiniz (bu nedenle, yalnızca ihtiyacınız olan ve kullanmadığınız sütunları SEÇME iyi bir fikirdir *)
Kümelenmiş dizinler fiziksel olarak tabloda depolanır. Bu, en hızlı oldukları ve tablo başına yalnızca bir kümelenmiş dizine sahip olabileceğiniz anlamına gelir.
Kümelenmemiş dizinler ayrı olarak saklanır ve istediğiniz kadar dizine sahip olabilirsiniz.
En iyi seçenek, kümelenmiş dizininizi en çok kullanılan benzersiz sütun, genellikle PK olarak ayarlamaktır. Çok zorlayıcı bir neden - tek bir düşünemiyorum, ama hey, orada olabilir - bunu yapmamak için ortaya çıkıyor çünkü tablolarınızda her zaman iyi seçilmiş bir kümelenmiş dizin olmalıdır.
Bu farklılıklar dışında, tablo kümelenmediğinde (tablonun kümelenmiş bir dizini olmadığında) veri dosyalarının sıralanmamış olduğunu ve veri yapısı olarak Yığın veri yapısını kullandığını bilmeniz gerekir.
Artıları:
Kümelenmiş dizinler aralıklar için harika çalışır (ör. My_table öğesinden * seçeneğini belirleyin; @min ve @max arasındaki my_key
Bazı durumlarda, bir orderby deyimi kullanırsanız DBMS sıralamak için iş yapmak zorunda kalmayacaksınız.
Eksileri:
Kümelenmiş dizinler ekleri yavaşlatabilir, çünkü yeni anahtarlar sıralı sırada değilse, kayıtlar yerleştirildikçe kayıtların fiziksel düzenleri değiştirilmelidir.
Kümelenmiş bir dizin temel olarak dizinli sütunlardaki verilerin sıralı bir kopyasıdır.
Kümelenmiş bir dizinin temel avantajı, sorgunuz (arama) dizindeki verileri bulduğunda, bu verileri almak için ek G / Ç'ye gerek duyulmamasıdır.
Kümelenmiş bir dizini, özellikle sık güncellenen bir tabloda tutmanın ek yükü, düşük performansa yol açabilir ve bu nedenle kümelenmemiş bir dizin oluşturulması tercih edilebilir.
Dizinlenmiş bir veritabanının iki bölümü vardır: bazı rasgele sırada düzenlenmiş bir dizi fiziksel kayıt ve bazı ölçütlere göre sıralanmış bir sonuç elde etmek için kayıtların okunması gereken sırayı tanımlayan bir dizi dizin. Fiziksel düzenleme ile indeks arasında bir korelasyon yoksa, tüm kayıtları sırayla okumak, birçok bağımsız tek kayıt okuma işleminin yapılmasını gerektirebilir. Bir veritabanı, ardışık olmayan iki kaydı okumak için gerekenden daha az zamanda düzinelerce ardışık kaydı okuyabildiğinden, dizinde ardışık olan kayıtlar da art arda diskte depolanırsa performans artabilir.
Örneğin, boş bir kümelenmemiş veritabanı ile başlayacak ve rastgele sırada 10.000 kayıt ekleyecek olsaydı, kayıtlar büyük olasılıkla en sonunda eklendikleri sırayla eklenirdi. Veritabanını dizine göre sıralı olarak okumak için 10.000 tek kayıt okuması gerekir. Ancak, kümelenmiş bir veritabanı kullanılacaksa, sistem her kaydı eklerken önceki kaydın tek başına depolanıp depolanmadığını kontrol edebilir; durum böyle olursa, bu kaydı veritabanının sonunda yenisiyle yazabilir. Daha sonra, taşınan kayıtların bulunduğu yuvalardan önceki fiziksel kayda bakabilir ve bunu izleyen kaydın tek başına depolanıp depolanmadığını görebilir. Eğer böyle olduğunu tespit ederse, o kaydı o noktaya taşıyabilir. Bu tür bir yaklaşım kullanmak birçok kaydın çiftler halinde gruplanmasına neden olur,
Gerçekte, kümelenmiş veritabanları bundan daha karmaşık algoritmalar kullanır. Bununla birlikte, dikkat edilmesi gereken önemli bir nokta, veritabanını güncellemek için gereken süre ile sırayla okumak için gereken zaman arasında bir ödünleşim olmasıdır. Kümelenmiş bir veritabanının tutulması, kayıtların sıralanması sırasını etkileyecek şekilde eklenmesi, kaldırılması veya güncelleştirilmesi için gereken iş miktarını önemli ölçüde artıracaktır. Veritabanı güncellenecek olandan çok daha sık okunacaksa, kümeleme büyük bir kazanç olabilir. Sık sık güncellenecek, ancak nadiren sırayla okunacaksa, özellikle veritabanına öğelerin eklendiği sıra, kümelenmiş dizine göre sıralama düzeninden bağımsızsa, kümeleme büyük bir performans kaybı olabilir.
Kümelenmiş bir dizin, kayıtların fiziksel olarak diskte depolanma sırasını açıklar, bu nedenle yalnızca bir tanesine sahip olmanızın nedeni.
Kümelenmemiş Dizin, diskteki fiziksel siparişle eşleşmeyen mantıksal bir sıra tanımlar.
Yukarıdaki mesajlardan teori bölümünü geçmiş olabilirsiniz:
-Kümelenmiş Dizin, kaydedilecek noktaları doğrudan görebildiğimiz için, yani doğrudan bir arama için daha az zaman alır. Ayrıca, dizini saklamak için fazladan bellek / alan gerekmez
-Kümelenmemiş Endeks'te dolaylı olarak kümelenmiş Endekse işaret ederken, gerçek kayda erişecektir, dolaylı doğası nedeniyle erişmek için daha fazla zaman alacaktır. indeks
// MSDN'den kopyalandığında, kümelenmemiş dizinin ikinci noktası diğer yanıtlarda açıkça belirtilmez.
kümelenmiş
kümelenmemiş