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


277

A clusteredve a arasındaki farklar nelerdir non-clustered index?


8
Tablo başına yalnızca bir kümelenmiş dizininiz olabilir. Ama başka birçok farklılık var ...
Tom Robinson

5
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.
Josh

1
Kümelenme temel olarak, verilerin tablodaki bu fiziksel sırada olduğu anlamına gelir. Bu yüzden tablo başına sadece bir tane olabilir. Kümelenmemiş, mantıklı bir düzen "yalnızca" anlamına gelir.
Biri

2
@biri "mantıksal" düzen nedir? Kümelenmemiş bir dizin, dizin anahtarlarını fiziksel olarak sırayla depolar ve tabloya bir işaretçi, yani kümelenmiş dizin anahtarı depolar.
Stephanie Page

@Stephanie Page: tablo açısından mantıklı. Tabii ki kümelenmemiş indeksler indeksin kendisinde fiziksel olarak sıralanır.
Biri

Yanıtlar:


268

Kümelenmiş Dizin

  • Tablo başına sadece bir tane
  • Veriler fiziksel olarak dizin düzeninde depolandığından, kümelenmemiş olandan daha hızlı okunur

Kümelenmemiş Dizin

  • Masa başına birçok kez kullanılabilir
  • Ekleme ve güncelleme işlemleri için kümelenmiş bir dizinden daha hızlı

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.


9
Depolama ile ilgili hususlar da vardır. Kümelenmiş dizini olmayan bir tabloya satır eklerken, satırlar arka arkaya depolanır ve bir satırın güncellenmesi, satırın tablonun sonuna taşınmasına, boş alan bırakmasına ve tablo ile dizinlerin parçalanmasına neden olabilir.
Jeremiah Peschka

4
x'in ne olduğu umrunda değil. Bilmeniz gereken tek şey, milyonlarca kullanıcısı olan bir uygulama için x'in önemli olacağı
Pacerier

14
Tamamen dogma. "Veriler sırayla saklandığından okumak daha hızlı" değildir. Bir dizinin okunmasını ve tabloyu okuduktan sonra okumayı hızlandırırsınız. Verileri sırayla sakladığından, menzil taraması daha hızlıdır (anlamlıysa). yani kümeleme faktörü mükemmeldir.
Stephanie Page

6
Ayrıca, kayıtların% 95'inin benzersiz olması gerektiği fikri yanlıştır. 1.000.000 satır içeren bir tablonuz olduğunu ve 500.000 anahtar içeren bir sütunu dizine eklediğinizi varsayalım. % 0 benzersizdir, ancak her tuş bir milyon satırdan 2'sini döndürür. Bu dizin, kayıtların% 0'ının benzersiz olmasına bakılmaksızın kesinlikle kullanışlıdır.
Stephanie Sayfa

2
"veriler fiziksel olarak dizin sırasına göre saklanır" ne demek istiyorsun? Bir düzeyde bu doğru bir şekilde doğrudur, çünkü veri sayfaları ve dizin yaprağı sayfaları bir ve aynıdır - bu yüzden birinin sıralaması diğerinin sırasını açıklar. Bununla birlikte, bu, dizin anahtarının sırası gibi belirli bir sırada değildir. Stackoverflow.com/questions/1251636/…
Martin Smith

79

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


3
'Ancak, yalnızca dizinlenmiş sütunlarda bulunan verileri seçerseniz, verileri doğrudan çoğaltılan dizin verilerinden geri alabilirsiniz' - evet, bu, kümelenmiş dizin buluşsal yöntemini tercih etmenin önemli istisnasıdır. Bu durumda aslında kümelenmiş bir dizin var sanırım, ancak daha az veri sorgulama böylece potansiyel olarak disk daha hızlı okunabilir.
satnhak

34

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.


3
"tablolarımızda her zaman kümelenmiş bir dizine sahip olmalıyız" konusunda daha fazla ayrıntı verebilir misiniz? bu ifade her zaman
Pacerier

1
Haklısın Pacerier, mutlak ifadeleri hafifçe kullanmamalısın. İyi seçilmiş bir kümelenmiş dizine sahip olmamanız gereken tek bir durum bilmememe rağmen, bu durum mevcut olabilir, bu yüzden cevabımı daha genel bir sürüme değiştirdim.
Santiago Cepas

28

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 (sql sürüm 2005'e kadar, sonraki sürümler 999 kümelenmemiş dizini destekler).
  2. Genellikle herhangi bir tuş üzerinde 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.

24

Kümelenmiş Dizin

  • Bir tabloda yalnızca bir kümelenmiş dizin bulunabilir
  • Kayıtları sıralayın ve siparişe göre fiziksel olarak saklayın
  • Veri alma, kümelenmemiş dizinlerden daha hızlı
  • Mantıksal yapıyı saklamak için fazladan alana gerek yoktur

Kümelenmemiş Dizin

  • Bir tabloda herhangi bir sayıda kümelenmemiş dizin olabilir
  • Fiziksel düzeni etkilemeyin. Veri satırları için mantıklı bir sipariş 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 ekstra alan kullanın

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.


10

Kümelenme temel olarak, verilerin tabloda fiziksel sırada olduğu anlamına gelir. Bu yüzden tablo başına sadece bir tane olabilir.

Kümelenmemiş, mantıklı bir düzen "yalnızca" anlamına gelir.


9

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.


6

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.


6

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.


5

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.


2

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

resim açıklamasını buraya girin


0

// MSDN'den kopyalandığında, kümelenmemiş dizinin ikinci noktası diğer yanıtlarda açıkça belirtilmez.

kümelenmiş

  • Kümelenmiş dizinler, veri satırlarını anahtar değerlerine göre tablo veya görünümde sıralar ve depolar. Bunlar dizin tanımında yer alan sütunlardır. Veri satırlarının kendileri yalnızca bir sırada depolanabildiğinden, tablo başına yalnızca bir kümelenmiş dizin olabilir.
  • Bir tablodaki veri satırlarının sıralı olarak depolandığı tek zaman, tablonun kümelenmiş bir dizin içermesidir. Bir tablonun kümelenmiş bir dizini olduğunda tablo kümelenmiş tablo olarak adlandırılır. Bir tablonun kümelenmiş dizini yoksa, veri satırları yığın adı verilen sıralanmamış bir yapıda depolanır.

kümelenmemiş

  • Kümelenmemiş dizinler, veri satırlarından ayrı bir yapıya sahiptir. Kümelenmemiş bir dizin, kümelenmemiş dizin anahtar değerlerini içerir ve
    her anahtar değer girdisinin, anahtar satırını içeren veri satırına bir işaretçisi vardır.
  • Kümelenmemiş bir dizindeki dizin satırından veri satırına işaretçi satır konumlandırıcı olarak adlandırılır. Satır bulucunun yapısı, veri sayfalarının bir yığın veya kümelenmiş bir tabloda depolanmasına bağlıdır. Bir yığın için, sıra bulucu sıraya bir işaretçi olur. Kümelenmiş bir tablo için, satır bulucu kümelenmiş dizin anahtarıdır.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.