Aracılığıyla paylaş


Eklenen sütunlarla dizin oluşturma

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

Bu makalede, SQL Server Management Studio veya Transact-SQL kullanarak SQL Server'da kümelenmemiş dizinlerin işlevselliğini genişletmek için dahil edilen (veya anahtar olmayan) sütunların nasıl ekleneceği açıklanır. Anahtar olmayan sütunları ekleyerek, daha fazla sorgu kapsayan kümelenmemiş dizinler oluşturabilirsiniz. Bunun nedeni, anahtar olmayan sütunların aşağıdaki avantajlara sahip olmasıdır:

  • Bunlar dizin anahtarı sütunları olarak izin verilmeyen veri türleri olabilir.
  • Dizin anahtarı sütunlarının veya dizin anahtarı boyutunun sayısı hesaplanırken Veritabanı Altyapısı tarafından dikkate alınmaz.

Anahtar olmayan sütunları olan bir dizin, sorgudaki tüm sütunlar anahtar veya anahtar olmayan sütunlar olarak dizine eklendiğinde sorgu performansını önemli ölçüde artırabilir. Sorgu iyileştiricisi dizindeki tüm sütun değerlerini bulabildiği için performans kazançları elde edilir; tablo veya kümelenmiş dizin verilerine erişilmezse disk G/Ç işlemleri daha az olur.

Note

Bir dizin bir sorgu tarafından başvuruda bulunılan tüm sütunları içerdiğinde genellikle sorguyu kapsayan olarak adlandırılır.

Tasarım Önerileri

  • Yalnızca arama ve aramalar için kullanılan sütunların anahtar sütunlar olması için büyük bir dizin anahtarı boyutuna sahip kümelenmemiş dizinleri yeniden tasarlayın. Sorguyu kapsayan diğer tüm sütunları anahtar olmayan sütunlara dönüştür. Bu şekilde, sorguyu kapsamak için gereken tüm sütunlara sahip olursunuz, ancak dizin anahtarının kendisi küçük ve verimlidir.

  • Sql Server 2016'nın (13.x) öncesinde en fazla 32 anahtar sütunu ve en fazla 1.700 bayt (16 anahtar sütunu ve 900 bayt) dizin anahtarı boyutu üst sınırını aşmamak için, anahtar olmayan sütunları kümelenmemiş dizine ekleyin. Veritabanı Altyapısı, dizin anahtarı sütunlarının veya dizin anahtarı boyutunun sayısını hesaplarken anahtar olmayan sütunları dikkate almaz.

  • Dizin tanımındaki anahtar olmayan sütunların sırası, dizini kullanan sorguların performansını etkilemez.

  • Dahil edilen sütunların temel tablo sütunlarının yeterince dar bir alt kümesini temsil etmediği çok geniş, kümelenmemiş dizinlerden kaçının. Geniş dizinler ekliyorsanız, her zaman fazladan geniş bir dizini güncelleştirme maliyetinin doğrudan tablodan okuma maliyetini dengeleyip dengelemediğini doğrulayın.

Sınırlamalar

  • Anahtar olmayan sütunlar yalnızca kümelenmemiş dizinlerde tanımlanabilir.

  • Metin, ntext ve görüntü dışındaki tüm veri türleri anahtar olmayan sütunlar olarak kullanılabilir.

  • Belirleyici ve ya kesin ya da kesin olmayan hesaplanmış sütunlar anahtar olmayan sütunlar olabilir. Daha fazla bilgi için bkz. Hesaplanan sütunlardaki dizinler.

  • Resim, ntext ve metin veri türlerinden türetilen hesaplanan sütunlar, hesaplanmış sütun veri türüne anahtar olmayan dizin sütunu olarak izin verildiğinde anahtar olmayan sütunlar olabilir.

  • Önce tablonun dizini bırakılmadığı sürece, anahtar olmayan sütunlar tablodan bırakılamaz.

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

    • sütunun NOT NULLNULLnull atanabilirliğini olarak değiştirin.

    • Varchar, nvarchar veya varbinary sütunlarının uzunluğunu artırın.

Security

Permissions

Tablo veya görünümde ALTER izin gerektirir. Kullanıcının sysadmin sabit sunucu rolünün veya db_ddladmin ve db_owner sabit veritabanı rollerinin üyesi olması gerekir.

SQL Server Management Studio kullanarak anahtar olmayan sütunlarla dizin oluşturma

  1. Nesne Gezgini'nde, üzerinde anahtar olmayan sütunlarla dizin oluşturmak istediğiniz tabloyu içeren veritabanını genişletmek için artı işaretini seçin.

  2. artı işaretini seçerek Tablolar klasörünü genişletin.

  3. Üzerinde anahtar olmayan sütunlarla dizin oluşturmak istediğiniz tabloyu genişletmek için artı işaretini seçin.

  4. Dizinler klasörüne sağ tıklayın, Yeni Dizin'in üzerine gelin ve Kümelenmemiş Dizin... öğesini seçin.

  5. Yeni Dizin iletişim kutusundaki Genel sayfasında, Dizin adı kutusuna yeni dizinin adını girin.

  6. Dizin anahtarı sütunları sekmesinin altında Ekle...'yi seçin.

  7. table_nameSütun Seç iletişim kutusunda, dizine eklenecek tablo sütununun veya sütunlarının onay kutusunu veya onay kutularını seçin.

  8. Tamam'ı seçin.

  9. Eklenen sütunlar sekmesinde Ekle...'yi seçin.

  10. table_nameSütun Seç iletişim kutusunda, dizine anahtar olmayan sütunlar olarak eklenecek tablo sütununun veya sütunların onay kutusunu veya onay kutularını seçin.

  11. Tamam'ı seçin.

  12. Yeni Dizin iletişim kutusunda Tamam'ı seçin.

Anahtar olmayan sütunlarla dizin oluşturmak için Transact-SQL kullanma

  1. Nesne Gezgini'nde Veritabanı Motoru'nun bir örneğine bağlanın.

  2. Standart araç çubuğunda, Yeni Sorgu'yu seçin.

  3. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Yürüt'e tıklayın.

    USE AdventureWorks2022;
    GO
    -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns.
    -- index key column is PostalCode and the nonkey columns are
    -- AddressLine1, AddressLine2, City, and StateProvinceID.
    CREATE NONCLUSTERED INDEX IX_Address_PostalCode
    ON Person.Address (PostalCode)
    INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);
    GO