SQL Server - Kümelenmiş ve Kümelenmemiş Dizin ne zaman kullanılır?


99

Kümelenmiş ve kümelenmemiş dizinler arasındaki temel farkları biliyorum ve gerçekte nasıl çalıştıklarını anlıyorum. Kümelenmiş ve kümelenmemiş dizinlerin okuma performansını nasıl iyileştirdiğini anlıyorum. Ama emin olmadığım bir şey, birini diğerine tercih etmemin sebeplerinin ne olacağıdır.

Örneğin: Bir tablonun kümelenmiş bir dizini yoksa, kümelenmemiş bir dizin oluşturmalı ve yapmanın faydası nedir?


3
Cevap verdiğiniz için teşekkürler. Ben bunun zaten farkındayım. Sorum olmayan bir kümelenmiş dizin oluşturma kümelenmiş bir dizin oluşturarak daha yararlanacak bir durum olurdu olduğunu
armulator

2
Evet, şu durumlarda kümelenmiş bir dizinden kaçınmalısınız; sütunun önemi düşük, belirli bir sıra yok, sık sık güncellenen, sıralı olmayan, birçok sütunun birleşiminden oluşuyor ...
TI

Cevabınız için teşekkürler. Yararlı
armulator

1
Belki bu soru size yardımcı olabilir: stackoverflow.com/questions/5070529/…
David García González

Yanıtlar:


117

Sadece bir uyarıda bulunmak istiyorum: lütfen kümelenmiş dizininizi çok dikkatli bir şekilde seçin! Her "normal" veri tablosunun kümelenmiş bir dizini olması gerekir, çünkü kümelenmiş bir dizine sahip olmak gerçekten birçok işlemi hızlandırır - evet, hızlanır , hatta ekler ve siler! Ancak yalnızca iyi bir kümelenmiş dizin seçerseniz .

Bu var en çoğaltılan SQL Server veritabanı veri yapısı. Kümeleme anahtarı, tablonuzdaki her bir kümelenmemiş dizinin bir parçası olacaktır.

Bir kümeleme anahtarı seçerken çok dikkatli olmalısınız - şu şekilde olmalıdır:

  • dar (ideal 4 bayt)

  • benzersiz (sonuçta "satır işaretçisi" dir. Eğer onu benzersiz yapmazsanız, SQL Server bunu sizin için arka planda yapacak, her giriş için size birkaç bayta mal olacak ve satır sayısı ve kümelenmemiş indeks sayısı var - bu çok maliyetli olabilir!)

  • statik (asla değiştirmeyin - mümkünse)

  • ideal olarak sürekli artan, böylece korkunç dizin parçalanması ile sonuçlanmayacaksınız (bir GUID, iyi bir kümeleme anahtarının tam tersidir - bu nedenle)

  • boş değer atanamaz ve ideal olarak sabit genişlikli olmalıdır - varchar(250)a çok zayıf bir kümeleme anahtarı yapar

Başka her şey, bu noktaların arkasında gerçekten ikinci ve üçüncü önem seviyesi olmalıdır ....

Kimberly Tripp'in ( The Queen of Indexing ) konuyla ilgili blog yayınlarından bazılarına bakın - blogunda yazdığı her şey kesinlikle paha biçilmezdir - okuyun, özetleyin - yaşayın!


1
Net açıklama için teşekkürler marc_s. Ama teknik olarak konuşursak, non clusteredindeks bizim için ne yapar ? önemi nedir ..?
hud

@nad: İyi seçilmiş kümelenmemiş bir dizin aramalarınızı hızlandırabilir - potansiyel olarak milyonlarca veri satırını arama kriterlerinizle karşılaştırmak yerine, yalnızca 4, 5 karşılaştırma içeren belirli bir satırı bulabilirsiniz. Bu BÜYÜK bir fark yaratır!
marc_s

1
@MuriloKunze: Kim Tripp'in konuyla ilgili blog gönderisini okuyun - bunun neden böyle olduğunu çok ayrıntılı bir şekilde açıklıyor
marc_s

5
Üzgünüm ama "SQL Server - Kümelenmiş ve Kümelenmemiş Dizin ne zaman kullanılır?" Sorusunun yanıtı nerede? ?
Eduard
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.