Filtre uygulanmış dizinler oluşturma

Bu konuda bir filtre uygulanmış dizin oluşturma açıklanmaktadır SQL Server 2012kullanarak SQL Server Management Studioya Transact-SQL. Özellikle kapak sorguları, veri iyi tanımlanmış bir alt--dan seçmek uygun optimize kümelendirilmemiş dizin filtre uygulanmış bir dizindir. Bu dizin tablodaki satırların bir kısmını filtre yüklemi kullanır. İyi tasarlanmış bir filtre uygulanmış dizin de sorgu performansını artırmak olarak tam tablo dizinleri ile karşılaştırıldığında dizin bakım ve depolama maliyetlerini düşürür.

Filtre uygulanmış dizinler tam tablo dizinleri aşağıdaki avantajları sağlar:

  • Gelişmiş sorgu performansı ve planı kalitesi

    İyi tasarlanmış bir filtre uygulanmış dizin sorgusu tam tablo kümelendirilmemiş dizin küçük olduğundan ve istatistik filtre uygulanmış Kalite performansı ve yürütme planı geliştirir. Filtre uygulanmış istatistikleri daha tam tablo istatistiklerini daha kesin çünkü onlar yalnızca filtre uygulanmış dizin satırları kapsayacak.

  • Azaltılmış dizin bakım maliyetlerini

    Dizin, dizin verileri, veri düzenleme dili (dml) deyimleri yalnızca etkiler zaman yapılmaktadır. Filtre uygulanmış dizin daha küçük olduğundan ve dizin verileri değiştirildiğinde yalnızca tutulan tam tablo kümelendirilmemiş dizin ile karşılaştırıldığında dizin bakım maliyetlerini düşürür. Özellikle seyrek değiştirilen veriler içeriyorsa, filtre uygulanmış dizinler, çok sayıda olması mümkündür. Benzer şekilde, filtre uygulanmış dizin sık değiştirilen verileri içeriyorsa, küçük boyutunun güncelleştirme istatistikleri maliyetini azaltır.

  • Azaltılmış dizin depolama maliyetlerini

    Bir tam tablo dizini gerekli olduğunda filtre uygulanmış bir dizin oluşturma kümelendirilmemiş dizinler için disk depolama alanı azaltır. Depolama gereksinimleri önemli ölçüde artırmadan, tam tablo kümelendirilmemiş dizin birden çok filtre uygulanmış dizinler ile değiştirebilirsiniz.

Bu Konuda

  • Başlamadan Önce

    Tasarım düşünceleri

    Sınırlamalar ve Kısıtlamalar

    Güvenlik

  • Bir filtre oluşturmak için dizin kullanarak:

    SQL Server Management Studio

    Transact-SQL

Başlamadan Önce

Tasarım düşünceleri

  • Sütun yalnızca ilgili değerleri sorgular için küçük bir sayı olduğunda değerleri alt üzerinde filtre uygulanmış bir dizin oluşturabilirsiniz. Örneğin, bir sütundaki değerleri çoğunlukla null ve sadece boş olmayan değerleri sorgu seçer, boş olmayan veri satırlarını filtre uygulanmış bir dizin oluşturabilirsiniz. Elde edilen dizin daha küçük ve daha aynı anahtar sütunlar üzerinde tanımlanan tam tablo kümelendirilmemiş dizin korumak için daha az maliyet.

  • Tablo türdeş olmayan veri satırları varsa, bir veya daha fazla veri kategorileri için filtre uygulanmış bir dizin oluşturabilirsiniz. Bu tablo belirli bir alanı sorguya odak daraltarak bu veri satırları sorguları performansını iyileştirebilir. Yine sonuç dizini daha küçük ve tam tablo kümelendirilmemiş dizin korumak için daha az maliyet.

Sınırlamalar ve Kısıtlamalar

  • Filtre uygulanmış dizin bir görünüm oluşturulamıyor. Ancak, sorgu iyileştirici bir görünümde başvurulan tabloda tanımlanmış bir filtre uygulanmış dizin yararlanabilir. Sorgu en iyi duruma getiricisi sorgu sonuçları doğru olacaksa bir görünümden seçer sorgu için filtre uygulanmış bir dizin dikkate alır.

  • Filtre uygulanmış dizinleri, dizin oluşturulmuş görünümler aşağıdaki avantajları vardır:

    • Dizin bakım maliyetleri azalır. Örneğin, sorgu işlemci, filtre uygulanmış dizin dizin oluşturulmuş görünüm daha güncelleştirmek için daha az cpu kaynağı kullanır.

    • Geliştirilmiş planı kalitesi. Örneğin, sorgu derleme sırasında eşdeğer dizinlenmiş görünümün daha daha fazla durumlarda filtre uygulanmış dizin kullanarak sorgu iyileştirici dikkate alır.

    • Çevrimiçi dizin yeniden oluşturur. Sorguları için kullanılabilir oldukları sırada filtre uygulanmış dizinler yeniden oluşturabilirsiniz. Çevrimiçi dizin yeniden dizin oluşturulmuş görünümler için desteklenmez. Daha fazla bilgi için bkz: yeniden oluşturma seçeneği ALTER INDEX (Transact-SQL).

    • Benzersiz olmayan dizinler. Dizin oluşturulmuş görünümler benzersiz olmalıdır süzülmüş dizinler benzersiz olmayan, olabilir.

  • Filtre uygulanmış dizinler bir tabloda tanımlanan ve yalnızca basit karşılaştırma işleçleri destekler. Eğer birden fazla tabloya başvuran veya karmaşık mantığı olan süzgeç ifadesi gerekiyorsa, bir görünüm oluşturmalısınız.

  • Bir sütun filtre uygulanmış dizin ifade bir anahtar olması gerekmez veya sütun filtre uygulanmış dizin tanımına dahil filtre uygulanmış dizin ifadesi için sorgu yüklemi eşdeğerdir ve sorgu sütun filtre uygulanmış dizin ifade ile sorgu sonuçları döndürmez.

  • Bir sütun filtre uygulanmış dizin ifade bir anahtarı olmalıdır veya sorgu yüklemi, sütun için filtre uygulanmış dizin ifadesi eşdeğer olmayan bir karşılaştırma kullanıyorsa, filtre uygulanmış dizin tanımı sütun dahil.

  • Filtre uygulanmış dizin deyim sütununda bir anahtarı olmalıdır veya sütun sorgu sonucuna ayarlanmışsa, sütun filtre uygulanmış dizin tanımına dahil.

  • Tablonun birincil anahtarı anahtar olması gerekli değil veya sütun filtre uygulanmış dizin tanımına dahil. Birincil anahtar otomatik filtre uygulanmış dizinler dahil olmak üzere bütün kümelendirilmemiş dizinler içinde bulunur.

  • Karşılaştırma işleci filtre uygulanmış dizin sonuçları bir veri örtülü veya açık dönüştürme filtre uygulanmış dizin ifadesi belirtilirse, dönüşüm karşılaştırma işleci solundaki oluşursa bir hata oluşacaktır. Filtre uygulanmış dizin ifadesi ile veri dönüştürme işleci (cast veya convert) karşılaştırma işlecini sağ tarafında yazmak için bir çözümdür.

Güvenlik

İzinler

Tablo veya görünümde ALTER izni gerektirir. Kullanıcı-meli var olmak a üye sysadmin sabit sunucu rolü veya db_ddladmin ve db_owner veritabanı rolleri sabit. Filtre uygulanmış dizin ifadeyi değiştirmek için create INDEX ile DROP_EXISTING kullanma.

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]

SQL Server Management Studio Kullanarak

Filtre uygulanmış bir dizin oluşturmak için

  1. Nesne Explorer'da filtre uygulanmış bir dizin oluşturmak istediğiniz tabloyu içeren veritabanı genişletmek için artı işaretini tıklatın.

  2. Genişletmek için artı işaretini tablo ağıl.

  3. Filtre uygulanmış bir dizin oluşturmak istediğiniz tabloyu genişletmek için artı işaretini tıklatın.

  4. Sağ Dizinler klasörüne gelin Yeni bir dizinve Non-Clustered Index….

  5. İçinde Yeni bir dizin iletişim kutusunu Genel sayfasında, yeni dizin adını dizin adı kutusu.

  6. Altında dizin anahtar sütunları, tıklayın Ekle….

  7. İçinde Seçin sütunlarından table_name iletişim kutusunda, onay kutusunu veya tablo sütunu veya benzersiz dizine eklenecek sütunların onay kutularını seçin.

  8. Click OK.

  9. Tarih filtre altında sayfa Filtre ifadesi, filtre uygulanmış dizin oluşturmak için kullanacağınız sql deyimi girin.

  10. Click OK.

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]

Transact-SQL'i Kullanma

Filtre uygulanmış bir dizin oluşturmak için

  1. İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.

  2. Standart çubuğunda Yeni sorgu.

  3. Kopyalama ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı Execute.

    USE AdventureWorks2012;
    GO
    -- Looks for an existing filtered index named "FIBillOfMaterialsWithEndDate"
    -- and deletes it from the table Production.BillOfMaterials if found. 
    IF EXISTS (SELECT name FROM sys.indexes
        WHERE name = N'FIBillOfMaterialsWithEndDate'
        AND object_id = OBJECT_ID (N'Production.BillOfMaterials'))
    DROP INDEX FIBillOfMaterialsWithEndDate
        ON Production.BillOfMaterials
    GO
    -- Creates a filtered index "FIBillOfMaterialsWithEndDate"
    -- on the table Production.BillOfMaterials 
    -- using the columms ComponentID and StartDate.
    
    CREATE NONCLUSTERED INDEX FIBillOfMaterialsWithEndDate
        ON Production.BillOfMaterials (ComponentID, StartDate)
        WHERE EndDate IS NOT NULL ;
    GO
    

    Filtre uygulanmış dizin yukarıdaki aşağıdaki sorgu için geçerlidir. Query optimizer filtre uygulanmış dizin kullandıysanız belirlemek için sorgu yürütme planı görüntüleyebilir.

    USE AdventureWorks2012;
    GO
    SELECT ProductAssemblyID, ComponentID, StartDate 
    FROM Production.BillOfMaterials
    WHERE EndDate IS NOT NULL 
        AND ComponentID = 5 
        AND StartDate > '01/01/2008' ;
    GO
    

Filtre uygulanmış dizin sql sorgu içinde kullanılmasını sağlamak için

  1. İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.

  2. Standart çubuğunda Yeni sorgu.

  3. Kopyalama ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı Execute.

    USE AdventureWorks2012;
    GO
    SELECT ComponentID, StartDate FROM Production.BillOfMaterials
        WITH ( INDEX ( FIBillOfMaterialsWithEndDate ) ) 
    WHERE EndDate IN ('20000825', '20000908', '20000918'); 
    GO
    

Daha fazla bilgi için bkz: Index (Transact-sql) oluştur.

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]