Aracılığıyla paylaş


Içerilen sütunları içeren dizin

Kümelenmemiş dizin yaprak düzey anahtar olmayan bir sütun ekleyerek, kümelenmemiş dizin işlevlerini genişletebilirsiniz.Anahtar olmayan bir sütun ekleyerek, daha fazla sorgularını kapsayan kümelenmemiş dizin oluşturabilirsiniz.Bu, çünkü bu anahtar olmayan sütunlar aşağıdaki faydaları vardır:

  • Bunlar, veri türleri, dizin anahtar sütunları kullanılamaz olabilir.

  • Bunlar tarafından kabul Database Engine anahtar sütunlarının dizin veya dizin, anahtar boyutu sayısı hesaplanırken.

Dizin anahtar olmayan sütunlarla birlikte, sorgu performansını, önemli ölçüde sorgudaki tüm sütunları ya da dizin anahtar veya anahtar olmayan bir sütun olarak yer artırabilirsiniz.sorgu iyileştiricisi, dizin içindeki tüm sütun değerleri bulabilirsiniz, çünkü performans artışı elde edilen; tablo veya kümelenmiş dizin veri daha az disk g/Ç işlemlerinde kaynaklanan erişilmez.

Not

Sorgu tarafından başvurulan tüm sütunların bir dizin varsa, buna genellikle, sorgu kapsayan olarak denir.

Anahtar olmayan bir sütun, anahtar sütunlarının tüm dizin düzeylerinde depolanır, ancak yalnızca yaprak düzeyinde depolanır.Dizin düzeyleri hakkında daha fazla bilgi için bkz: Tablo ve dizin kuruluşu.

Içerilen sütunları kullanarak boyutu sınırlarını kaçının.

Geçerli dizin boyutu sınırlamaları en fazla 16 anahtar sütun ve 900 baytı en fazla dizin anahtar boyutu aşmasını önlemek için bir kümelenmemiş dizin, anahtar olmayan bir sütun ekleyebilirsiniz.The Database Engine does not consider nonkey columns when calculating the number of index anahtar columns or index anahtar size.

Örneğin, aşağıdaki sütunlarda indekslemek istediğiniz varsayalım Document ' de tablo AdventureWorks Örnek Veritabanı'nı tıklatın:

     Title nvarchar(50)

     Revision nchar(5)

     FileName nvarchar(400)

Çünkü nchar ve nvarchar veri türleri, her karakter için 2 bayt gerektirir, bu üç sütun içeren bir dizin 10 bit (2 * 455) olarak 900 bayt boyutu sınırı aşabilir. Kullanarak INCLUDE ın yan tümce CREATE INDEX deyim, dizin anahtarının tanımlanabilir ()Title, Revision) ve FileName anahtar olmayan bir sütun olarak tanımlı. Bu yolla, dizin anahtar boyutu 110 bayt (55 * 2) olur ve tüm gerekli sütunlara dizin yine de içerir.Aşağıdaki deyim, bir dizin oluşturur.

USE AdventureWorks;
GO
CREATE INDEX IX_Document_Title       
ON Production.Document (Title, Revision)       
INCLUDE (FileName);       

Içerilen sütunlar yönergeleri içeren dizin

Kümelenmemiş dizin sütunlar ile tasarlarken aşağıdaki yönergeleri dikkate alın:

  • CREATE INDEX INCLUDE yan tümcesinde tanımlanan anahtar olmayan sütunları deyim.

  • Anahtar olmayan sütunlar, tablolar veya dizin oluşturulmuş görünümler kümelenmemiş dizin üzerinde yalnızca tanımlanabilir.

  • Tüm veri türleri dışında izin verilir text, ntext, ve image.

  • Hesaplanan sütunlar deterministic olan ve bu sütunlar kesin veya imprecise olabilir.Daha fazla bilgi için bkz:Hesaplanan sütunlar üzerinde dizin oluşturma.

  • Anahtar sütunlarla gibi hesaplanan sütunlar türetilen image, ntext, ve text veri türleri, hesaplanan bir sütunun veri türü Anahtar olmayan dizin sütunu olarak izin verilir olarak anahtar olmayan (dahil) bir sütun olabilir.

  • Sütun adları her iki EKLEME listesine ve anahtar sütunu listesindeki belirtilemez.

  • Sütun adları EKLEME listesine yinelenmesi edemiyor.

Sütun boyutu yönergeleri

  • En az bir anahtar sütun tanımlanmalıdır.En büyük anahtar olmayan sütunları 1023 sütun sayısıdır.Bu tablo sütunlarını eksi 1 en fazla sayısıdır.

  • Dizin anahtar sütunları, nonkeys dışında en fazla 16 anahtar sütunlarının varolan dizin boyutu sınırlamaları ve toplam dizin anahtar boyutunu 900 baytı gelmelidir.

  • Tüm anahtar olmayan sütunları toplam boyutu INCLUDE yan tümcesinde belirlenen sütun boyutu ile sınırlıdır, varchar(max) Sütun 2 GB ile sınırlıdır.

Sütun değiştirme yönergeleri.

Gelen bir sütun olarak tanımlanan bir tablo sütunu değiştirdiğinizde, aşağıdaki kısıtlamalar geçerlidir:

  • Anahtar olmayan sütunlar arasında kesilmesini edemiyor tablo sürece, dizinin ilk bıraktı.

  • Aşağıdakileri yapmak dışında anahtar olmayan sütunları değiştirilemez:

    • Sütunun null atanabilirlik NOT NULL için NULL değiştirin.

    • Uzunluğunu artırma varchar, nvarchar, veya varbinary sütunlar.

      Not

      Bu sütun değiştirme kısıtlamalar, dizin anahtar sütunlar için de geçerlidir.

Tasarım öneriler

Kümelenmemiş dizin büyük dizin bir anahtar boyutu ile yeniden tasarlamanız, böylece yalnızca sütunları, arama ve arama için kullanılan anahtar sütunlarının.Sorgunun içerdiği anahtar olmayan sütunları kapsayan diğer tüm sütunları olun.Bu şekilde, sorgu karşılamak için gereken tüm sütunları gerekir, ancak dizin anahtarının küçük ve etkin.

Örneğin, aşağıdaki sorguyu ele almak için bir dizin tasarımı istediğinizi varsayalım.

USE AdventureWorks;
GO
SELECT AddressLine1, AddressLine2, City, StateProvinceID, PostalCode
FROM Person.Address
WHERE PostalCode BETWEEN N'98000' and N'99999';

Sorgu karşılamak için , her bir sütun dizinde tanımlanmalıdır.Anahtar boyutu, anahtar sütunlarının tüm sütunları tanımlayabilirsiniz, ancak 334 bayt olabilir.Gerçekte, arama ölçütü olarak kullanılan tek bir sütun olduğundan PostalCode sütun, 30 bayt olarak uzunluğu olması daha iyi bir dizin tasarımı tanımlamanız PostalCode anahtar sütunu olarak ve tüm diğer sütunların anahtar olmayan sütunlar içerir.

Aşağıdaki tablo, sorgu kaplayacak şekilde sütunlar ile bir dizin oluşturur.

USE AdventureWorks;
GO
CREATE INDEX IX_Address_PostalCode       
ON Person.Address (PostalCode)       
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);       

Performans konuları

Gereksiz sütunları eklemekten kaçının.Anahtar veya anahtar olmayan, çok fazla dizin sütunları ekleme, aşağıdaki performans üzerindeki etkileri olabilir:

  • Daha az dizin satır, bir sayfa sığmayacak.Bu işlem, g/Ç artar oluşturabilir ve önbellek verimliliğini düşürür.

  • Daha fazla disk alanı dizinin depolamak için gereklidir.Özellikle, ekleme varchar(max), nvarchar(max), varbinary(max), veya xml anahtar olmayan dizinin sütunlar veri türleri, disk alanı gereksinimleri önemli ölçüde artabilir. Sütun değerleri dizin yaprak düzeye kopyalanır olmasıdır.Bu nedenle, dizin ve temel tablo içinde bulundukları.

  • Dizin bakım değişiklikler, ekler, güncelleştirmeleri veya silmeleri, temel alınan tablo veya dizinli görünüm gerçekleştirmek için gereken süreyi artırabilir.

Sorgu performans kazançları veri değişikliği sırasında ve ek disk alanı gereksinimleri performans etkisi outweigh olup olmadığını belirlemek zorunda kalırsınız.Sorgu performansı değerlendiriliyor hakkında daha fazla bilgi için bkz: Sorgu ayarlama.