Kümelenmiş ve Kümelenmemiş dizin aslında ne anlama geliyor?


1118

DB sınırlı bir maruz kalma var ve sadece bir uygulama programcısı olarak DB kullandık. Bilmem istiyorum Clusteredve Non clustered indexes. Google'ı aradım ve bulduğum şey:

Kümelenmiş dizin, tablodaki kayıtların fiziksel olarak depolanma şeklini yeniden düzenleyen özel bir dizin türüdür. Bu nedenle tablonun yalnızca bir kümelenmiş dizini olabilir. Kümelenmiş bir dizinin yaprak düğümleri veri sayfalarını içerir. Kümelenmemiş dizin, dizinin mantıksal sırasının diskteki satırların fiziksel olarak depolanan sırasıyla eşleşmediği özel bir dizin türüdür. Kümelenmemiş bir dizinin yaprak düğümü veri sayfalarından oluşmaz. Bunun yerine, yaprak düğümleri dizin satırları içerir.

SO ne buldum Kümelenmiş ve kümelenmemiş bir dizin arasındaki farklar nelerdir? .

Birisi bunu açık İngilizce olarak açıklayabilir mi?

Yanıtlar:


1116

Kümelenmiş bir dizinle, satırlar fiziksel olarak diskte dizinle aynı sırada depolanır. Bu nedenle, yalnızca bir kümelenmiş dizin olabilir.

Kümelenmemiş bir dizinle, fiziksel satırlara işaret eden ikinci bir liste vardır. Her yeni dizin yeni kayıt yazma süresini artıracak olsa da, kümelenmemiş birçok dizine sahip olabilirsiniz.

Tüm sütunları geri almak istiyorsanız genellikle kümelenmiş bir dizinden okumak daha hızlıdır. Önce dizine sonra da tabloya gitmeniz gerekmez.

Verileri yeniden düzenlemeye ihtiyaç varsa, kümelenmiş bir dizine sahip bir tabloya yazmak daha yavaş olabilir.


43
Ne demek istediğinizi "fiziksel" olarak açıklığa kavuşturmalısınız.
Spencer Ruport

142
fiziksel olarak diskte saklanan gerçek bitlerde olduğu gibi
Peter

17
Bakınız MSDN "Bir birincil anahtar kısıtlaması oluşturduğunuzda, sütun veya sütunlarda benzersiz kümelenmiş dizin otomatik olarak oluşturulur eğer gerekli değil hangi araçlar, aynı sütun olmak zorunda masaya kümelenmiş dizin zaten yok".
Ming

46
@Pete böyle değil. SQL Server, tüm veri dosyalarının bitişik bir fiziksel disk alanına yerleştirildiğini ve sıfır dosya sistemi parçalanması olduğunu kesinlikle garanti etmez. Veri dosyasında kümelenmiş bir dizinin sıralı olduğu bile doğru değil. Durumun böyle olmadığı mantıksal parçalanma derecesi.
Martin Smith

42
Martin Smith'in nokta kümelenmiş dizinlerini yedeklemek için hızlı bir yorum, diskte sıralı depolamayı garanti etmez. Verilerin diske tam olarak yerleştirildiği yeri yönetmek, DBMS'nin değil işletim sisteminin görevidir. Ancak, öğelerin genellikle kümeleme anahtarına göre sıralandığını gösterir. Bunun anlamı, eğer DB 10GB büyürse, işletim sisteminin bu 10GB'ı diskin farklı kısımlarına 5x2GB yığınlarına koymaya karar verebilmesidir. 10 GB'ı kapsayan kümelenmiş bir tablo, her 2 GB'lık yığın üzerinde sırayla depolanır, ancak bu 2 GB'lik parçalar sıralı olmayabilir.
blobbles

601

Kümelenmiş dizin, veritabanına aslında birbirine yakın yakın değerleri diskte depolamasını bildirdiğiniz anlamına gelir. Bu, bir dizi kümelenmiş indeks değerine düşen kayıtların hızlı taranması / alınması avantajına sahiptir.

Örneğin, iki tablonuz var: Müşteri ve Sipariş:

Customer
----------
ID
Name
Address

Order
----------
ID
CustomerID
Price

Belirli bir müşterinin tüm siparişlerini hızlı bir şekilde almak istiyorsanız, Sipariş tablosunun "MüşteriNo" sütununda kümelenmiş bir dizin oluşturmak isteyebilirsiniz. Bu şekilde, aynı CustomerID'ye sahip kayıtlar fiziksel olarak birbirine yakın bir yerde (kümelenmiş) depolanır ve bu da bunların alınmasını hızlandırır.

PS CustomerID dizini açıkçası benzersiz olmayacaktır, bu nedenle ya dizini "benzersizleştirmek" için ikinci bir alan eklemeniz ya da veritabanının sizin için işlemesine izin vermeniz gerekir, ancak bu başka bir hikaye.

Birden çok dizin ile ilgili. Verilerin fiziksel olarak nasıl düzenleneceğini tanımladığından, tablo başına yalnızca bir kümelenmiş dizine sahip olabilirsiniz. Bir benzetme istiyorsanız, içinde birçok tablo bulunan büyük bir oda hayal edin. Bu tabloları birkaç satır oluşturacak şekilde yerleştirebilir veya büyük bir konferans masası oluşturmak için hepsini bir araya getirebilirsiniz, ancak aynı anda her iki yolu da kullanamazsınız. Bir tablonun başka dizinleri olabilir, daha sonra kümelenmiş dizindeki girişleri gösterecek ve bu da sonunda gerçek verileri nerede bulacağını söyleyecektir.


4
CI her zaman PK için kullanılmalıdır söyleniyor
mko

4
Kümelenmiş bir dizinle, dizin veya tablodaki kayıtlar birbirine yakın mı saklanır?
Caltor

5
@Caltor Tablo. Dizin, tanım gereği sıralanmıştır. Örneğin, bir btree sipariş edilir, böylece sadece arama yapmak için adres aritmetiği yapılabilir. Kümenin fikri, tabloyu belirli bir endeksin performansına sağlamaktır. Açıkça belirtmek gerekirse , tablonun kayıtları dizinin başlangıçtaki sırasına uyacak şekilde yeniden sıralanacaktır .
FLGMwt

9
@Caltor Hiç de değil! Gerçekten de, dokümantasyon ve ismin kendisi oldukça yanıltıcı. "Kümelenmiş bir dizinin" olması, dizinle çok az ilgilidir. Kavramsal olarak, gerçekten sahip olduğunuz şey "dizin x üzerinde kümelenmiş bir tablodur ".
FLGMwt

3
@ JohnOrtizOrdoñez: Elbette, o kadar no, satır saklanan neredeyse herhangi birini kullanabilirsiniz XML, VARCHAR(MAX)ya da VARBINARY(MAX). Genellikle tarih alanı kümeye mantıklı olduğunu Not İlk bir kümelenmiş dizin tarih türlerinde en yaygın olanlarıdır menzilli taramalarla, en verimli olduğu gibi. YMMV.

317

SQL Server satır yönelimli depolamada, hem kümelenmiş hem de kümelenmemiş dizinler B ağaçları olarak düzenlenir.

resim açıklamasını buraya girin

( Görüntü Kaynağı )

Kümelenmiş endeksler ve non kümelenmiş endeksler arasındaki temel fark kümelenmiş dizin yaprak düzey olmasıdır olduğu tablo. Bunun iki sonucu vardır.

  1. Kümelenmiş dizin yaprak sayfalarındaki satırlar , tablodaki (seyrek olmayan) sütunların her biri için her zaman bir şey içerir (değer veya gerçek değere bir işaretçi).
  2. Kümelenmiş dizin, tablonun birincil kopyasıdır.

Kümelenmemiş dizinler, INCLUDEanahtar olmayan tüm sütunları açıkça dahil etmek için yan tümcesi (SQL Server 2005'ten beri) kullanarak nokta 1'i de yapabilir, ancak bunlar ikincil temsillerdir ve verilerin her zaman başka bir kopyası vardır (tablonun kendisi).

CREATE TABLE T
(
A INT,
B INT,
C INT,
D INT
)

CREATE UNIQUE CLUSTERED INDEX ci ON T(A,B)
CREATE UNIQUE NONCLUSTERED INDEX nci ON T(A,B) INCLUDE (C,D)

Yukarıdaki iki dizin neredeyse aynı olacaktır. Üst düzey dizin sayfaları anahtar sütunlar için değerler A,Bve yaprak düzeyi sayfalarA,B,C,D

Veri satırlarının kendileri yalnızca bir sırada sıralanabildiğinden, tablo başına yalnızca bir kümelenmiş dizin olabilir.

Çevrimiçi SQL Server kitaplarından yukarıdaki alıntı çok karışıklığa neden oluyor

Benim düşünceme göre çok daha iyi ifade olurdu.

Kümelenmiş dizinin yaprak düzeyi satırları tablo satırları olduğundan , tablo başına yalnızca bir kümelenmiş dizin olabilir .

Kitaplar online alıntı yanlış değil ama hem kümelenmemiş hem de kümelenmiş endekslerin "sıralama" fiziksel değil mantıklı olduğu açık olmalıdır. Bağlantılı listeyi izleyerek sayfaları yaprak düzeyinde okur ve sayfadaki satırları yuva dizisi sırasına göre okursanız, dizin satırlarını sıralı olarak okursunuz, ancak fiziksel olarak sayfalar sıralanamayabilir. Kümelenmiş bir dizinle satırların her zaman fiziksel olarak diskte dizin anahtarıyla aynı sırada depolandığına dair yaygın inanç .

Bu saçma bir uygulama olacaktır. Bir satır 4GB masanın ortasına yerleştirilir Örneğin SQL Server yok değil yeni eklenen satıra ilişkin yapmak odasına dosyadaki verilerin 2 GB kadar kopyalamak gerekiyor.

Bunun yerine bir sayfa ayrımı gerçekleşir. Kümelenmiş ve kümelenmemiş dizinlerin yaprak düzeyindeki her sayfa File:Pagemantıksal anahtar sırasıyla bir sonraki ve bir önceki sayfanın adresine ( ) sahiptir. Bu sayfaların bitişik veya anahtar sırada olması gerekmez.

örneğin, bağlantılı sayfa zinciri 1:2000 <-> 1:157 <-> 1:7053

Sayfa bölme gerçekleştiğinde, dosya grubundaki herhangi bir yerden yeni bir sayfa ayrılır (karma tablolardan, küçük tablolar için veya bu nesneye ait boş olmayan tek biçimli bir boyuttan veya yeni tahsis edilen tek biçimli boyuttan). Dosya grubu birden fazla içeriyorsa, bu aynı dosyada bile olmayabilir.

Mantıksal düzen ve bitişikliğin idealize edilmiş fiziksel versiyondan ne derece farklı olduğu mantıksal parçalanma derecesidir.

Tek bir dosya ile yeni oluşturulmuş bir veritabanında aşağıdakileri çalıştırdım.

CREATE TABLE T
  (
     X TINYINT NOT NULL,
     Y CHAR(3000) NULL
  );

CREATE CLUSTERED INDEX ix
  ON T(X);

GO

--Insert 100 rows with values 1 - 100 in random order
DECLARE @C1 AS CURSOR,
        @X  AS INT

SET @C1 = CURSOR FAST_FORWARD
FOR SELECT number
    FROM   master..spt_values
    WHERE  type = 'P'
           AND number BETWEEN 1 AND 100
    ORDER  BY CRYPT_GEN_RANDOM(4)

OPEN @C1;

FETCH NEXT FROM @C1 INTO @X;

WHILE @@FETCH_STATUS = 0
  BEGIN
      INSERT INTO T (X)
      VALUES        (@X);

      FETCH NEXT FROM @C1 INTO @X;
  END

Ardından, sayfa düzenini

SELECT page_id,
       X,
       geometry::Point(page_id, X, 0).STBuffer(1)
FROM   T
       CROSS APPLY sys.fn_PhysLocCracker( %% physloc %% )
ORDER  BY page_id

Sonuçlar her yerde vardı. Anahtar sırasındaki ilk satır (1 değeriyle - aşağıdaki okla vurgulanmış) neredeyse son fiziksel sayfada bulunuyordu.

resim açıklamasını buraya girin

Parçalanma, mantıksal düzen ile fiziksel düzen arasındaki korelasyonu arttırmak için bir dizin yeniden oluşturularak veya yeniden organize edilerek azaltılabilir veya kaldırılabilir.

Koşu sonrası

ALTER INDEX ix ON T REBUILD;

Aşağıdakileri aldım

resim açıklamasını buraya girin

Tablonun kümelenmiş bir dizini yoksa buna yığın adı verilir.

Kümelenmemiş dizinler, bir yığın veya kümelenmiş bir dizin üzerine oluşturulabilir. Her zaman taban tablasına kadar bir sıra bulucu içerirler. Bir yığın durumunda bu fiziksel bir satır tanımlayıcıdır (rid) ve üç bileşenden oluşur (Dosya: Sayfa: Yuva). Kümelenmiş bir dizin olması durumunda, satır bulucu mantıklıdır (kümelenmiş dizin anahtarı).

İkinci durumda, kümelenmemiş dizin zaten doğal olarak CI anahtar sütunlarını NCI anahtar sütunları veya INCLUDE-d sütunları olarak içeriyorsa, hiçbir şey eklenmez. Aksi takdirde, eksik CI anahtar sütunları sessizce NCI'ye eklenir.

SQL Server her zaman anahtar sütunlarının her iki dizin türü için benzersiz olmasını sağlar. Ancak bunun benzersiz olarak bildirilmeyen dizinler için uygulandığı mekanizma, iki dizin türü arasında farklılık gösterir.

Kümelenmiş dizinler uniquifier, var olan bir satırı çoğaltan anahtar değerlere sahip satırlar için eklenir. Bu sadece artan bir tamsayıdır.

Benzersiz SQL Server olarak bildirilmeyen kümelenmemiş dizinler için, sessizce satır bulucuyu kümelenmemiş dizin anahtarına ekler. Bu, yalnızca gerçekten yinelenen satırlar için değil, tüm satırlar için geçerlidir.

Kümelenmiş ve kümelenmemiş adlandırma sütun deposu dizinleri için de kullanılır. Kağıt SQL Server Sütun Mağazaları yapılan geliştirmeler devletler

Sütun deposu verileri herhangi bir anahtarda gerçekten "kümelenmemiş" olsa da, birincil dizine kümelenmiş dizin olarak gönderme yapan geleneksel SQL Server kuralını korumaya karar verdik.


8
@brainstorm evet bunun farkındayım. Muhtemelen bu MSDN sayfasındaki ifadeden dolayıdır, ancak orada ifadenin biraz yanıltıcı olduğunu görmek için sadece parçalanma konularına
Martin Smith

12
@brainstorm: Bazı yanlış ifadelerin müjde olarak nasıl tekrarlanması şaşırtıcı. Kümelenmiş, en azından ardışık okumalar perspektifinden bakıldığında , satırların fiziksel olarak diskte dizinle aynı sırada depolanmasının "arzu edilir" olduğunu gösterir , ancak bu, aslında bunların böyle bir tarzda depolanabilir.
supercat

5
@MartinSmith Testinizin sonuçlarını yeniden oluşturdum ve onayladım SQL Server 2014. Ben olsun 95%ilk ekleme sonra indeksin parçalanmasını. Sonra index rebuildparçalanma oldu 0%ve değerler emredildi. Merak ediyorum, söyleyebilir miyiz The only time the data rows in a table are stored in sorted order is when its clustered index fragmentation is 0?
gotqn

8
@MartinSmith Şimdi, efendim, bu bir cevap. Yanıtlar listesinin başında görmek isterdim ama SO giderken, "hızlı ve basit" upvoting alır.
vaitrafra

5
@Manachi bu soruya orijinal soru sorulduktan 5 yıl sonra cevap verildi. Bunun amacı, bu cevapların bazı yanıltıcı yönlerini düzeltmektir. OP'nin (şimdi 8 yaşında) kaprisleri benim için bir endişe değil. Diğer okuyucular daha düşük düzeyde bir görüşü takdir edebilir.
Martin Smith

150

Bunun çok eski bir soru olduğunun farkındayım, ancak yukarıdaki iyi cevapları göstermek için bir benzetme sunacağımı düşündüm.

KÜMELENMİŞ ENDEKS

Bir halk kütüphanesine girerseniz, kitapların hepsinin belirli bir sırada (büyük olasılıkla Dewey Ondalık Sistemi veya DDS) düzenlendiğini göreceksiniz. Bu , kitapların "kümelenmiş dizinine" karşılık gelir . İstediğiniz kitabın DDS numarası 005.7565 F736solsaydı, etiketlenmiş kitap rafı sırasını 001-099veya bunun gibi bir şeyi bularak başlardınız . (Yığının sonundaki bu bitiş işareti, dizindeki bir "ara düğüme" karşılık gelir.) Sonunda etiketli belirli bir rafa inersiniz 005.7450 - 005.7600, ardından belirtilen DDS # ile kitabı bulana kadar tararsınız ve o noktada kitabınızı buldunuz.

KÜMELENMEMİŞ DİZİN

Ancak, kitabınızın DDS #'ı ezberlenmiş olarak kütüphaneye gelmediyseniz, size yardımcı olması için ikinci bir dizine ihtiyacınız olacaktır. Eski günlerde kütüphanenin önünde "Kart Kataloğu" olarak bilinen harika bir çekmece bürosu bulunurdu. İçinde binlerce 3x5 kart vardı - her kitap için bir tane, alfabetik sıraya göre (belki de başlığa göre). Bu, "kümelenmemiş dizine" karşılık gelir . Bu kart katalogları hiyerarşik bir yapıda düzenlenmiştir, böylece her çekmece içerdiği kart aralığıyla etiketlenir ( Ka - Klörneğin, "ara düğüm"). Bir kez daha, kitabınızı bulana kadar içeri girersiniz, ancak bu durumda, onu bulduktan sonra (yani, "yaprak düğümü"), kitabın kendisine sahip olmazsınız,indeksasıl kitabı kümelenmiş dizinde bulabileceğiniz numarası (DDS #).

Tabii ki, hiçbir şey kütüphanecinin tüm kartları fotokopisini çekmesini ve ayrı bir kart kataloğunda farklı bir düzende sıralamasını engellemez. (Genellikle bu tür en az iki katalog vardı: biri yazar adına ve diğeri başlığa göre sıralanmıştır.) Prensip olarak, bu "kümelenmemiş" dizinlerden istediğiniz kadarına sahip olabilirsiniz.


2
Belki de, bu benzetmeyi Kümelenmemiş Dizinlerle kullanılabilen "Dahil" sütunları tanımlamak için genişletebilirim : Kart kataloğunda sadece tek bir kitaptan daha fazlasını içeren bir kart düşünülebilir, bunun yerine yayınlanan tüm bir liste kitabın yayınlanma tarihine göre sayısal olarak düzenlenmiş sürümleri. Tıpkı "dahil edilen bir sütunda" olduğu gibi, bu bilgiler sadece yaprak düzeyinde saklanır (böylece kütüphanecinin yaratması gereken kart sayısını azaltır).
kmote

1
büyük benzetme - gerçekten görselleştirmeye yardımcı olur!
Denis

71

Kümelenmiş ve kümelenmemiş dizinlerin bazı özelliklerini aşağıda bulabilirsiniz:

Kümelenmiş Dizinler

  1. Kümelenmiş dizinler, bir SQL tablosundaki satırları benzersiz şekilde tanımlayan dizinlerdir.
  2. Her tablonun tam olarak bir kümelenmiş dizini olabilir.
  3. Birden fazla sütunu kapsayan kümelenmiş bir dizin oluşturabilirsiniz. Örneğin: create Index index_name(col1, col2, col.....).
  4. Varsayılan olarak, birincil anahtarı olan bir sütunda zaten kümelenmiş bir dizin vardır.

Kümelenmemiş Dizinler

  1. Kümelenmemiş dizinler basit dizinlere benzer. Sadece verilerin hızlı bir şekilde alınması için kullanılırlar. Benzersiz verilere sahip olduğunuzdan emin değilim.

34
Nokta 1. Bir kümelenmiş dizin biri hafif düzeltme yok değil mutlaka eşsiz bir SQL tablosu satırları tanımlamak. BİR PRİMER ANAHTAR'ın işlevi budur
Nigel

4
@Nigel, BİRİNCİL ANAHTAR veya BENZERSİZ BİR DİZİN?
anar khalilov

pratik ve doğrudan cevap, teşekkürler @Anirudh Sood
Oscar Romero

50

Çok basit, teknik olmayan bir genel kural, kümelenmiş dizinlerin genellikle birincil anahtarınız (veya en azından benzersiz bir sütun) için kullanılması ve kümelenmemiş olanların diğer durumlar için (belki bir yabancı anahtar) kullanılmasıdır. . Aslında, SQL Server varsayılan olarak birincil anahtar sütunlarınızda kümelenmiş bir dizin oluşturur. Öğrenmiş olacağınız gibi, kümelenmiş dizin, verilerin diskte fiziksel olarak sıralanma şekliyle ilgilidir, bu da çoğu durum için çok yönlü bir seçim olduğu anlamına gelir.


47

Kümelenmiş Dizin

Kümelenmiş bir dizin bir tablodaki DATA'nın fiziksel sırasını belirler.Bu nedenle bir tablonun yalnızca 1 kümelenmiş dizini vardır.

  • " sözlük " Başka bir Endekse gerek yok, zaten kelimelere göre Endeks

Kümelenmemiş Dizin

Kümelenmemiş bir dizin Kitaptaki bir dizine benzer. Veriler tek bir yerde saklanır. Dizin başka bir yerde saklanıyor ve dizin verilerin depolandığı yere işaret ediyor. Bu nedenle bir tabloda 1'den fazla Kümelenmemiş dizin var.

  • Bakarken " Kimya kitabı" Bölüm konumunu işaret etmek için ayrı bir dizin ve "END" de ortak WORDS konumunu gösteren başka bir Dizin var

6

Kümelenmiş Dizin

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 sıralanabildiğ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 bir dizin satırından bir 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.

Mevcut dizin anahtarı sınırlarını atlamak ve tam olarak kapsanmış, dizinlenmiş sorgular yürütmek için kümelenmemiş dizinin yaprak düzeyine anahtar olmayan sütunlar ekleyebilirsiniz. Daha fazla bilgi için bkz. Dahil Edilen Sütunlarla Dizin Oluşturma. Dizin anahtarı sınırlamaları hakkında ayrıntılar için bkz. SQL Server için Maksimum Kapasite Özellikleri.

Referans: https://docs.microsoft.com/tr-tr/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described


4

"Kümeleme endeksi" hakkında Veritabanı Sistemleri: Komple Kitap : 15.6.1 alınan bir ders kitabı tanımı sunalım :

Ayrıca , bir öznitelik veya öznitelikler üzerindeki dizinler olan kümeleme dizinlerinden de bahsedebiliriz , böylece bu dizinin arama anahtarı için sabit bir değere sahip tüm gruplar, bunları tutabilecek kadar az blokta görünür.

Tanımı anlamak için, ders kitabı tarafından sağlanan Örnek 15.10'a bir göz atalım:

R(a,b)Öznitelikte sıralanan ave bu sırada saklanan ve bloklar halinde paketlenmiş bir ilişki kesinlikle kümelenir. Üzerinde bir dizin abir küme dizinidir, çünkü belirli bir adeğer a1 için, bu değere sahip tüm agruplar ardışıktır. Böylece, Şekil 15.14'te önerildiği gibi, muhtemelen -1 adeğeri içeren ilk ve son bloklar için yürütülen bloklar halinde paketlenmiş olarak görünürler. Bununla birlikte, b üzerindeki bir dizinin kümelenmesi pek olası değildir, çünkü sabit bdeğerli değere sahip olan tuples değerleri ave bçok yakından ilişkili olmadıkça tüm dosyaya yayılacaktır .

Şekil 15.14

Tanımlamanın veri bloklarının diskte bitişik olması gerektiğini zorlamadığını unutmayın; yalnızca arama anahtarlı grupların mümkün olduğunca az veri bloğuna paketlendiğini söylüyor.

İlgili bir kavram kümelenmiş ilişkidir . Bir ilişki, tupl'leri kabaca bu tuplleri tutabilecek kadar az sayıda blok halinde paketlenirse "kümelenir". Başka bir deyişle, bir disk bloğu perspektifinden, eğer farklı ilişkilerden tuples içeriyorsa, bu ilişkiler kümelenemez (yani, bu ilişkinin tuples'lerini diğer disk bloklarından geçerli disk bloğundaki ilişkiye ait değil. Açıkçası, R(a,b)yukarıdaki örnekte kümelenmiştir.

İki kavramı birbirine bağlamak için kümelenmiş bir ilişkinin bir kümeleme dizini ve kümelenmeyen dizini olabilir. Ancak, kümelenmemiş ilişki için, dizin ilişkinin birincil anahtarının üstüne oluşturulmadıkça, kümeleme dizini mümkün değildir.

Bir kelime olarak "Küme" veritabanı depolama tarafının tüm soyutlama seviyelerinde (üç soyutlama seviyesi: tuples, bloklar, dosya) spamdır. " Kümelenmiş dosya " adı verilen ve bir dosyanın (bir grup blok için bir soyutlama (bir veya daha fazla disk bloğu)) bir ilişkiden veya farklı ilişkilerden tuples içerip içermediğini açıklayan bir kavram . Dosya düzeyinde olduğu gibi kümeleme endeksi kavramı ile ilgili değildir.

Bununla birlikte, bazı öğretim materyalleri , kümelenmiş dosya tanımına dayalı olarak kümeleme dizinini tanımlamayı sever. Bu iki tanım türü, veri disk bloğu veya dosya açısından kümelenmiş ilişki tanımlasalar da, kümelenmiş ilişki düzeyinde aynıdır. Bu paragraftaki bağlantıdan,

Dosyadaki öznitelik (ler) A üzerindeki bir dizin şu durumlarda bir kümeleme dizinidir: A = a öznitelik değeri olan tüm gruplar veri dosyasında sırayla (= art arda) depolanır

Tuples'ları ardışık olarak saklamak, "tuples kabaca bu tuplesleri tutabilecek kadar az sayıda blok halinde paketlenir" (bir dosya hakkında konuşurken diğeri disk hakkında konuşurken) ile aynıdır. Bunun sebebi tupleın ardışık olarak depolanmasının "bu tuplleri tutabileceği kadar kabaca birkaç blok halinde paketlenmiş" hale getirmenin yolu olmasıdır.


3

Kümelenmiş Dizin: Birincil Anahtar kısıtlaması, tabloda zaten kümelenmiş bir Dizin yoksa otomatik olarak kümelenmiş Dizin oluşturur. Kümelenmiş dizinin gerçek verileri, Dizin yaprak düzeyinde saklanabilir.

Kümelenmemiş Dizin: Kümelenmemiş dizinin gerçek verileri doğrudan yaprak düğümünde bulunmaz, bunun yerine yalnızca gerçek verilere işaret eden satır bulucu değerlerine sahip olduğu için bulmak için ek bir adım atması gerekir. Kümelenmemiş Dizin, kümelenmiş dizin olarak sıralanamaz. Tablo başına birden fazla kümelenmemiş dizin olabilir, aslında kullandığımız sql sunucusu sürümüne bağlıdır. Temelde SQL Server 2005 249 Kümelenmemiş Dizin'e izin verir ve 2008, 2016 gibi yukarıdaki sürümler için tablo başına 999 Kümelenmemiş Dizin'e izin verir.


2

Kümelenmiş Dizin - Kümelenmiş bir dizin, verilerin bir tabloda fiziksel olarak depolanma sırasını tanımlar. Tablo verileri yalnızca yolla sıralanabilir, bu nedenle tablo başına yalnızca bir kümelenmiş dizin olabilir. SQL Server'da, birincil anahtar kısıtlaması o sütunda otomatik olarak kümelenmiş bir dizin oluşturur.

Kümelenmemiş Dizin- Kümelenmemiş bir dizin, tablo içindeki fiziksel verileri sıralamaz. Aslında, kümelenmemiş bir dizin bir yerde depolanır ve tablo verileri başka bir yerde depolanır. Bu, kitap içeriğinin bir yerde ve dizinin başka bir yerde bulunduğu bir ders kitabına benzer. Bu, tablo başına birden fazla kümelenmemiş dizin sağlar. Burada tablonun içinde verilerin kümelenmiş bir dizine göre sıralanacağından bahsetmek önemlidir. Ancak, kümelenmemiş dizin verileri belirtilen sırada saklanır. Dizin, dizinin oluşturulduğu sütun değerlerini ve sütun değerinin ait olduğu kaydın adresini içerir. Dizinin oluşturulduğu bir sütuna karşı bir sorgu yayınlandığında, veritabanı önce dizine gider ve tablodaki karşılık gelen satırın adresi. Daha sonra bu satır adresine gidecek ve diğer sütun değerlerini getirecektir. Bu ek adım nedeniyle, kümelenmemiş dizinler kümelenmiş dizinlerden daha yavaştır

Kümelenmiş ve Kümelenmemiş dizin arasındaki farklar

  1. Tablo başına yalnızca bir kümelenmiş dizin olabilir. Ancak, tek bir tabloda birden çok kümelenmemiş dizin oluşturabilirsiniz.
  2. Kümelenmiş dizinler yalnızca tabloları sıralar. Bu nedenle, fazladan depolama alanı tüketmezler. Kümelenmemiş dizinler, gerçek tablodan ayrı bir yerde depolanarak daha fazla depolama alanı olduğunu iddia eder.
  3. Kümelenmiş dizinler, fazladan arama adımı içermediğinden kümelenmemiş dizinlerden daha hızlıdır.

Daha fazla bilgi için bu makaleye bakın.

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.