it-swarm-tr.com

Kümelenmiş ve kümelenmemiş bir dizin arasındaki farklar nelerdir?

clustered ve non-clustered index arasındaki farklar nelerdir?

254
Eric Labashosky

Kümelenmiş Dizin

  • Tablo başına sadece bir tane
  • Veriler fiziksel olarak indeks sırasına kaydedildiğinden kümelenmemiş değerden daha hızlı okuma

Kümelenmemiş Dizin

  • Tablo başına birçok kez kullanılabilir
  • Kümelenmiş bir dizinden daha ekleme ve güncelleme işlemleri için daha hızlı

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.

241
Martynnw

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 *)

69
rslite

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.

31
Santiago Cepas

Kümelenmiş Dizin

  1. Bir tablo için yalnızca bir kümelenmiş dizin olabilir.
  2. Genellikle birincil anahtarda yapılır.
  3. Kümelenmiş bir dizinin yaprak düğümleri veri sayfalarını içerir.

Kümelenmemiş Dizin

  1. Bir tablo için yalnızca 249 kümelenmemiş dizin olabilir (2005 sürümüne kadar sql sürüm 999'a kadar kümelenmemiş dizini destekler).
  2. Genellikle herhangi bir tuşa yapılır.
  3. Kümelenmemiş bir dizinin yaprak düğümü veri sayfalarından oluşmaz. Bunun yerine, yaprak düğümleri dizin satırları içerir.
25
Jojo

Kümelenmiş Dizin

  • Tabloda yalnızca bir kümelenmiş dizin bulunabilir
  • Kayıtları sıralayın ve sırasına göre fiziksel olarak saklayın
  • Veri alımı, kümelenmemiş dizinlerden daha hızlı
  • Mantıksal yapıyı depolamak için fazladan alana gerek yok

Kümelenmemiş Dizin

  • Bir tabloda herhangi bir sayıda kümelenmemiş dizin olabilir
  • Fiziksel düzeni etkilemez. Veri satırları için mantıksal bir düzen oluşturun ve fiziksel veri dosyalarına işaretçiler kullanın
  • Veri ekleme/güncelleme kümelenmiş dizinden daha hızlı
  • Mantıksal yapıyı depolamak için fazladan boşluk kullanın.

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.

20
Lasitha Yapa

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.

8
Biri

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.

6
Giovanni Galbo

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.

5
Josh

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.

5
Ed Guiness

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.

5
supercat

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

 enter image description here

0

// MSDN'den kopyalanan kümelenmemiş dizinin ikinci noktası diğer cevaplarda açıkça belirtilmemiştir. 

Kümelenmiş

  • Kümelenmiş dizinler, veri değerlerini tabloda veya görünümünde. Bunlar, İndex tanımında yer alan sütunlardır. Tablo başına sadece bir kümelenmiş indeks olabilir, Çünkü veri satırları sadece bir sırada saklanabilir.
  • Bir tablodaki veri satırlarının sıralı sırayla depolanmasının tek zamanı, tablonun kümelenmiş bir dizin içermesi durumunda Bir tablonun Kümelenmiş bir dizini olduğunda, tablonun kümelenmiş bir tablo olduğunu Bir tablo Kümelenmiş bir dizine sahip değilse, veri satırları bir yığın adı verilen sıralanmamış bir.. Yapısında depolanır.

Kümelenmemiş

  • Kümelenmemiş dizinler, veri satırlarından ayrı bir yapıya sahiptir. Bir... Kümelenmemiş dizin kümelenmemiş dizin anahtarı değerlerini içerir ve
    her anahtar değer girişi, anahtar değerini içeren veri satırına bir göstergeye sahiptir.
  • Kümelenmemiş bir dizindeki bir dizin satırındaki işaretçi, bir veri satırına. Satır konumlandırıcısının yapısı, Veri verilerinin bir yığın halinde mi yoksa kümelenmiş bir tabloda mı depolandığına bağlıdır. Kümelenmiş Tablosu için, satır bulucu kümelenmiş dizin anahtarıdır.
0
Deepak Mishra