Aracılığıyla paylaş


Eklenen sütunlar ile dizin

Kümelenmemiş dizinleri işlevselliği için anahtar olmayan sütunlarla ekleyerek genişletebilirsiniz yaprak düzey kümelenmemiş dizin.Anahtar olmayan sütunlarla dahil olmak üzere daha fazla sorgularını karşılamak kümelenmemiş dizinler oluşturabilirsiniz.Bunun nedeni sütunlarla aşağıdaki faydaları vardır:

  • Bunlar dizin anahtar sütunları izin verilen veri türleri olabilir.

  • Bunlar tarafından dikkate alınmaz Veritabanı Altyapısı , hesaplama numarası dizin anahtar sütunları veya dizin anahtar boyutu.

Dizinde ya da anahtar veya anahtar olmayan sütunlarla dahil tüm sütunları sorgu zaman dahil sütunlarla taşıyan bir dizin sorgu performansını önemli ölçüde iyileştirebilir.Performans artışı elde çünkü sorgu iyileştiricisi ; dizin içindeki tüm sütun değerleri bulabilirsiniz Tablo veya kümelenmiş dizin veri daha az disk g/Ç işlemlerinde ortaya çıkan erişilebilir değil.

Not

Bir dizin sorgu tarafından başvurulan tüm sütunların içerdiğinde Buna genellikle, sorgu kapsayan olarak denir.

Tüm dizin düzeylerinde anahtar sütunlarında depolanır, ancak anahtar olmayan sütunlarla yalnızca yaprak düzey depolanır.Dizin düzeyleri hakkında daha fazla bilgi için bkz: Tablo ve dizin organizasyon.

Boyut sınırları önlemek için sütunlar kullanma

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

Örneğin, aşağıdaki sütunlarda dizin oluşturmak istediğinizi varsayalım Document , tablo AdventureWorks2008R2 örnek veritabanı:

     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 bayt (455 * 2) 900 bayt boyutu sınırı aşabilir.Kullanarak INCLUDE yan tümce tümce CREATE INDEX deyim, dizin anahtarını tanımlı olarak (Title, Revision) ve FileName tanımlı olarak anahtar olmayan bir sütun.Bu yolla, dizin anahtar boyutu 110 bayt (55 * 2) olur ve dizin hala gerekli olan tüm sütunlar içerir.Aşağıdaki deyim, bu tür bir dizin oluşturur.

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

Eklenen sütunlar yönergeleri ile dizin

Kümelenmemiş dizinler dahil sütunlarla tasarlarken aşağıdaki yönergeleri dikkate alın:

  • create INDEX deyim INCLUDE yan tümce tümce tümce olmayan sütunlarla tanımlanır.

  • Anahtar olmayan sütunlarla yalnızca tablo veya dizin oluşturulmuş görünümler üzerinde kümelenmemiş dizinler üzerinde de tanımlanabilir.

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

  • Hesaplanan sütunlar deterministic olmayan ve kesin ya da günümüzdeki sütunlar olabilir.Daha fazla bilgi için bkz: Dizinler üzerinde hesaplanan sütunlar oluşturma.

  • Hesaplanan sütunlar türetilen anahtar sütunları ile gibi image, ntext, ve text olarak hesaplanan sütun veri türü olarak izin verilen veri türleri (dahil) anahtar olmayan sütunlarla olabilirbir dizin anahtarı olmayan sütun.

  • Sütun adları her iki ekleme listesine ve anahtar sütun listesi belirtilemez.

  • Sütun adları Ekle listesine yinelenemez.

Sütun boyutu yönergeleri

  • En az bir anahtar sütun tanımlanmış olmalıdır.En büyük anahtar olmayan sütunlarla 1023 sütun sayısıdır.Bu tablo sütunları eksi 1 en büyük sayısıdır.

  • Dizin anahtar sütunları, nonkeys hariç, en fazla 16 anahtar sütun varolan dizin boyut kısıtlamaları ve 900 bayt toplam dizin anahtar boyutunu izlemeniz gerekir.

  • Include yan tümce tümce tümcesinde belirlenen sütun boyutu tarafından yalnızca tüm sütunlarla toplam boyutu sınırlıdır; Örneğin, varchar(max) sınırlı sütunlar2 gb. için

Sütun değiştirme yönergeleri

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

  • Anahtar olmayan sütunlarla edemiyor bırakılan gelen tablo dizini ilk bırakılan sürece.

  • Anahtar olmayan sütunlarla, aşağıdakileri yapmak dışında değiştirilemez:

    • Değişiklik null atanabilirlik , sütunundan not null null.

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

      Not

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

Tasarım önerileri

Arama ve arama için kullanılan tek sütun anahtar sütunları olan büyük dizin anahtar boyutu olan kümelenmemiş dizinleri yeniden tasarlama.Sorgu dahil sütunlarla kapak tüm sütunları olun.Bu şekilde, sorgu ancak dizin karşılamak için gerekli tüm sütunları olur anahtar kendisi küçük ve verimli değildir.

Örneğin, aşağıdaki sorgu karşılamak için bir dizin tasarlama istediğinizi varsayalım.

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

Sorgu karşılamak için her sütun dizin tanımlanmalıdır.Anahtar boyutu, anahtar sütunları olarak tüm sütunları tanýmlayabilirsiniz rağmen 334 bayt olacaktır.Aslında arama ölçütü olarak kullanılan tek sütun olduğundan PostalCode sütun 30 bayt uzunluğuna sahip olmak, daha iyi bir dizin tasarımı tanımlamak PostalCode anahtar sütunu olarak ve tüm diğer sütunlarda anahtarı olmayan sütunlar.

Aşağıdaki deyim, sorgu karşılamak için sütunlar ile bir dizin oluşturur.

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

Performans değerlendirmeleri

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

  • Üzerinde daha az dizin satır için uygun bir sayfa.Bu g/Ç artar oluşturabilir ve önbellek verimlilik sınırlı.

  • Dizini depolamak için daha fazla disk alanı gerekir.Özellikle, ekleme varchar(max), nvarchar(max), varbinary(max), veya xml anahtarı olmayan dizin sütunları olarak veri türleri önemli ölçüde artırma disk alanı gereksinimleri.Bunun nedeni sütun değerleri dizin yaprak düzey kopyalanır.Bu nedenle, bunlar hem dizin hem de temel tablo bulunur.

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

Performans veri değişikliği sırasında ve ek disk alanı gereksinimlerini etkiler sorgu performans kazanç sağlamayacağını belirlemek zorunda kalırsınız.Sorgu performans değerlendirme hakkında daha fazla bilgi için bkz: Sorgu ayarlama.