Kümelenmiş ve kümelenmemiş dizinler

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Dizin, tablo veya görünümden satırların alınmasını hızlandıran bir tablo veya görünümle ilişkilendirilmiş bir disk içi yapıdır. Dizin, bir tablo veya görünümdeki bir veya birden çok sütundan oluşturulan anahtarları içerir. Bu anahtarlar, SQL Server Database Engine'in anahtar değerlerle ilişkili satır veya satırları hızlı ve verimli bulmasını sağlayan bir yapıda (B-ağaç) saklanır.

Note

Belgelerde genellikle dizinlere başvuruda B ağacı terimi kullanılır. Rowstore dizinlerinde Veritabanı Altyapısı bir B+ ağacı uygular. Bu, sütun deposu dizinleri veya bellek için iyileştirilmiş tablolardaki dizinler için geçerli değildir. Daha fazla bilgi için SQL Server ve Azure SQL dizin mimarisi ve tasarım kılavuzuna bakın.

Bir tablo veya görünüm, kümelenmiş ve kümelenmiş olmayan indeksler içerebilir.

Hem kümelenmiş hem de kümelenmemiş dizinler benzersiz olabilir. Benzersiz bir dizinde, dizin anahtarı için aynı değere sahip iki satır olamaz. Aksi takdirde, dizin benzersiz değildir ve birden çok satır aynı anahtar değerini paylaşabilir. Daha fazla bilgi için bkz. Benzersiz dizin oluşturma.

Dizinler, tablo verileri her değiştirildiğinde bir tablo veya görünüm için otomatik olarak korunur.

Bellek optimize edilmiş tablolardaki indeksler dahil olmak üzere daha fazla özel amaçlı indeks türü için Indekslere bakınız.

Kümelenmiş dizinler

Kümelenmiş dizinler, veri satırlarını anahtar değerlerine göre tablo veya görünümde sıralar ve depolar. Bu anahtar değerler, dizin tanımına dahil edilen sütunlardır. Her tablo için yalnızca bir kümelenmiş indeks olabilir, çünkü veri satırları sadece tek bir sırayla depolanabilir.

Tablodaki veri satırlarının sıralı olarak depolandığı tek zaman, tablonun kümelenmiş dizin içermesidir. Bir tablo kümelenmiş bir indekse sahipse, tabloya kümelenmiş tablo denir. Bir tablonun kümelenmiş bir indeks yoksa, veri satırları yığın adı verilen sırasız bir yapıda saklanır.

Kümelenmemiş dizinler

Kümelenmemiş dizinlerin veri satırlarından ayrı bir yapısı vardır. Kümelenmemiş dizin, kümelenmemiş dizin anahtarı değerlerini içerir ve her anahtar değeri girdisinin anahtar değerini içeren veri satırına yönelik bir işaretçisi vardır.

Kümelenmemiş dizindeki bir dizin satırından veri satırına yönelik işaretçiye satır bulucu adı verilir. Satır bulucunun yapısı, veri sayfalarının yığında mı yoksa kümelenmiş tabloda mı depolandığına bağlıdır. Yığın için, satır bulucu bir satır işaretçisidir. Kümelenmiş tablo için satır bulucu, kümelenmiş dizin anahtarıdır.

Var olan dizin anahtarı sınırlarını atlamak ve tam kapsamlı sorgular yürütmek için kümelenmemiş dizinin yaprak düzeyine anahtar olmayan sütunlar ekleyebilirsiniz. Daha fazla bilgi için bkz. Eklenen sütunlarla dizin oluşturma. Dizin anahtarı sınırları hakkında ayrıntılı bilgi için bkz. SQL Server için kapasite belirtimleri üst sınırı.

Dizinler ve kısıtlamalar

Veritabanı Altyapısı, tablo sütunlarında PRIMARY KEY ve UNIQUE kısıtlamalarını tanımladığınızda otomatik olarak dizinler oluşturur. Örneğin, bir UNIQUE kısıtlama içeren bir tablo oluşturduğunuzda, Database Engine otomatik olarak kümelenmiş olmayan bir indeks oluşturur. Bir PRIMARY KEY yapılandırırsanız, kümelenmiş bir dizin zaten mevcut değilse Veritabanı Altyapısı otomatik olarak kümelenmiş bir dizin oluşturur. Mevcut bir tabloda bir kısıtlama uygulamaya PRIMARY KEY çalıştığınızda ve o tabloda zaten kümelenmiş bir indeks varken, Database Engine birincil anahtarı kümelenmiş olmayan bir indeks kullanarak uygular.

Daha fazla bilgi için bkz. Birincil anahtar oluşturma ve Benzersiz kısıtlamalar oluşturma.

Sorgu optimizatoru indeksleri nasıl kullanır

İyi tasarlanmış dizinler disk G/Ç işlemlerini azaltabilir ve daha az sistem kaynağı tüketebilir. Bu nedenle, bu dizinler sorgu performansını geliştirir. Dizinler , , SELECTUPDATEveya DELETE deyimleri içeren MERGEçeşitli sorgular için yararlı olabilir. Veritabanındaki sorguyu SELECT JobTitle, HireDate FROM HumanResources.Employee WHERE BusinessEntityID = 250AdventureWorks2025 göz önünde bulundurun. Bu sorguyu çalıştırdığınızda, sorgu optimizleyicisi verileri almak için mevcut olan her yöntemi değerlendirir ve en verimli yöntemi seçer. Yöntem tablo taraması olabilir ya da varsa bir veya daha fazla indeks tarama olabilir.

Tablo taraması sırasında sorgu iyileştiricisi tablodaki tüm satırları okur ve sorgunun ölçütlerine uyan satırları ayıklar. Tablo taraması, birçok disk G/Ç işlemi yaratır ve kaynak kullanımını yoğunlaştırabilir. Ancak, örneğin sorgunun sonuç kümesi tablodaki satırların yüksek bir yüzdesiyse, tablo taraması en verimli yöntem olabilir.

Sorgu iyileştiricisi bir dizin kullandığında, dizin anahtarı sütunlarını arar, sorgunun gerektirdiği satırların depolama konumunu bulur ve eşleşen satırları bu konumdan ayıklar. Genellikle, dizinde arama, tabloda aramaktan çok daha hızlıdır. Bir tablodan farklı olarak, bir dizin genellikle satır başına çok az sütun içerir ve satırlar sıralı düzendedir.

Sorgu iyileştiricisi genellikle sorguları yürütürken en verimli yöntemi seçer. Ancak, kullanılabilir dizin yoksa, sorgu iyileştiricisi bir tablo taraması kullanmalıdır. Ortamınıza en uygun indeksler tasarlamanız ve oluşturmanız gerekir ki, sorgu optimizatoru seçebileceğiniz verimli indeksler seçebilsin. Database Engine, veritabanı ortamınızın analizine ve uygun indekslerin seçilmesine yardımcı olmak için Veritabanı Altyapısı Ayarlama Danışmanı'ı sağlar.

Faydalı bir dizin mevcut olmadığında, eniyileyici öneriyi yürütme planlarına ve eksik dizin dinamik yönetim görünümlerine kaydeder. Bu önerilere göre hareket etmek için, eksik indeks önerileriyle kümelenmemiş indeksleri ayarlamak sayfasına bakınız.

Note

Devre dışı bırakılmış bir dizin meta verilerde kalır, ancak sorgu iyileştiricisi siz onu yeniden oluşturana kadar bu dizini yok sayar. Daha fazla bilgi için bkz. Dizinleri ve kısıtlamaları devre dışı bırakma ve Dizinleri ve kısıtlamaları etkinleştirme.

Indeks tasarım yönergeleri ve iç bileşenler hakkında daha fazla bilgi için Index mimarisi ve tasarım rehberine bakınız.