Dizin oluşturulmuş görünümler tasarlama

Görünüm olarak da bilinen sanal satır ve sütunlar içeren bir tablo olarak aynı genel formu görünümü tarafından döndürülen sonuç küme vardır ve Görünümler tabloları sql deyimlerinde gibi başvurulan çünkü tablolarıdır.sonuç küme Standart Görünüm'de kalıcı olarak veritabanında depolanan.Standart bir görünüm sorgu başvuran her saat SQL Server dahili olarak kadar değiştirilmiş sorgu oluşturulan sorgu içine görünümünün tanımını değiştirir, başvurular yalnızca temel tablo.Sonra sonuçta elde edilen sorgu her zamanki gibi çalıştırır.Daha fazla bilgi için bkz: Görünüm çözümleme.

Standart görünüm, dinamik olarak oluşturma yükünü sonuç küme için bir görünüme başvuran her sorgu karmaşık işlenmesi çok sayıda çok sayıda veri toplama veya çok sayıda katılma gibi satırlar içeren görünümler için önemli olabilir.Bu tür görünümleri sorgularda sık başvurulan, benzersiz kümelenmiş dizin görünümü oluşturarak performansı artırabilir.Benzersiz kümelenmiş dizin üzerinde bir görünüm oluşturulduğunda, sonuç küme veritabanında yalnızca gibi saklanan bir tablo bir kümelenmiş dizin ile birlikte saklanır.

İyileştirici görünümü dizine doğrudan view from yan tümce tümce tümcesinde ad sorgularını kullanarak başlatır bir görünüm dizin oluşturmayı başka bir yararı olur.Varolan sorguları verileri alma geliştirilmiş verimlilik fayda dizinli görünüm recoded gerek kalmadan.Daha fazla bilgi için bkz: Dizinler üzerinde görünümler çözme.

Temel tablolardaki verileri değişiklikler yapıldıkça, veri değişiklikleri depolanan verileri yansıtılır dizinli görünüm.Gereksinim görünümün kümelenmiş dizin benzersiz olduğunu, verimliliği artırır SQL Server dizindeki tarafından etkilenen satırların bulabilirsiniztüm veri değişikliği.

Hem sorgu hem de görünüm tanımı aşağıdaki eşleşen öğeleri içeren önceki sürümlere sorguları işlerken dizin oluşturulmuş görünümler yararlanmak için sorgu iyileştiricisi özellikleri geliştirilmiştir:

  • Skalar ifade.Örneğin, aşağıdaki sorgu, yüklemi skaler bir ifade ile sorgu iyileştiricisi eşleşebilir:

    SELECT ColA, ColB FROM TableT WHERE ColC * (ColD + 10) > 50
    

    Bu görünüm oluşturulmuş bir dizini için:

    CREATE VIEW V1 WITH SCHEMABINDING AS
    SELECT ColA, ColB, ColC * (ColD + 10) AS ExpCol
    FROM dbo.TableT 
    

    Kullanıcı tanımlı fonksiyonlar ekleme skalar ifadeler de benzer şekilde eşleştirilir.

  • Skalar toplu işlevleri.Bir skaler içeren Örneğin, aşağıdaki sorgu toplu işlev kendi listesinde:

    SELECT COUNT_BIG (*) FROM dbo.TableT
    

    Bu görünüm oluşturulmuş bir dizini ile eşleştirilir:

    CREATE VIEW V2 WITH SCHEMABINDING AS
    SELECT COUNT_BIG (*) AS Cnt 
    FROM dbo.TableT 
    

sorgu iyileştiricisi De aşağıdaki sorgu planı seçtiğinde dikkate alacaktır:

  • dizinli görünüm içinde tanımlanmış bir aralık içinde olup olmadığını zaman aralığı içinde bir sorgu yüklemi tanımlanan değerler denk.Örneğin, aşağıdaki görünüm oluşturulmuş bir dizini göz önünde bulundurun:

    CREATE VIEW V1 WITH SCHEMABINDING AS
    SELECT ColA, ColB, ColC FROM dbo.TableT
    WHERE ColA > 1 and ColA < 10
    

    Aşağıdaki sorgu göz önünde bulundurun:

    SELECT ColB, ColC FROM dbo.TableT
    WHERE ColA > 3 and ColA < 7
    

    sorgu iyileştiricisi Bu sorgu görünümü ile uyabilecek V1 çünkü arasındaki aralığı 3 ve 7 sorgu falls arasındaki aralığı içinde tanımlanan 1 ve 10 tanımlanan dizinli görünüm.

  • How much an expression defined in a query is equivalent to that defined in an indexed view.SQL Server tries to match expressions by considering their column references, literals, the logical operators AND, OR, NOT, BETWEEN and IN, and the comparison operators =, <>, >, <, >=, and <=.Aritmetik işleçler gibi + ve % ve parametreleri olmayan değerlendirilir.

    Örneğin, sorgu iyileştiricisi aşağıdaki sorgu eşleşir:

    SELECT ColA, ColB from dbo.TableT
    WHERE ColA < ColB 
    

    Bu görünüm oluşturulmuş bir dizini ile:

    CREATE VIEW V1 WITH SCHEMABINDING AS
    SELECT ColA, ColB FROM dbo.TableT
    WHERE ColB > ColA 
    

Tüm dizinler olduğu gibi unutmayın, SQL Server , sorgu planı eksikse dizinli görünüm kullanmak seçerse sorgu iyileştiricisi Bunu yapmak için yardımcı olup olmadığını belirler.

Dizin oluşturulmuş görünümler'ın herhangi bir sürümünü oluşturulabilir SQL Server 2008.De SQL Server 2008 kuruluş, sorgu iyileştiricisi otomatik olarak dizinli görünüm. düşünürDiğer tüm sürümlerde dizinli görünüm kullanmak için tablo noexpand ipucu kullanılmalıdır.

Dizin oluşturulmuş görünüm tasarlama yönergeleri.

Dizin oluşturulmuş görünümler, alttaki veri seyrek güncelleştirildiğinde en iyi çalışır.dizinli görünüm Bakımı bakım maliyetini büyük bir tablo dizin.dizinli görünüm veri saklama maliyeti, alttaki veriler sık sık güncelleştirilir, dizinlenmiş görünümün performans yararları basmaktadır.Temel alınan veri toplu olarak düzenli aralıklarla güncelleştirilir ancak öncelikle salt okunur olarak güncelleştirmeleri arasında kabul, güncelleştirme ve daha sonra yeniden oluşturuluyor önce tüm dizin oluşturulmuş görünümler bırakarak düşünün.Böylece güncelleştirmelerin performansını artırabilir.

Dizin oluşturulmuş görünümler aşağıdaki sorgu türleri performansını:

  • Birleşimler ve çok sayıda işlem toplamalardan.

  • Çok sayıda sorgu tarafından sık sık gerçekleştirilen birleştirme ve toplama işlemleri.

    Örneğin, envanter kaydı bir çevrimiçi-işlem işleme (oltp) veritabanında, çok sayıda sorgu getirmesi beklenen birleştirmek ProductMaster, ProductVendor, ve VendorMaster tablolar.Bu birleştirmek işlemi gerçekleştiren her sorgu çok sayıda işlem olsa da, yüz binlerce gibi sorguları genel birleştirmek işlenmesi önemli olabilir.Bu ilişkileri sık sık güncelleştirilmesi büyük olasılıkla, çünkü tüm sistemin genel performansını birleştirilmiş sonuçlar depolandığı dizinli görünüm tanımlama tarafından geliştirilip.

  • Karar destek iş yükleri.

    Analiz sistemleri nadiren özetlenen, toplanan verileri depolamak tarafından belirlenir.Buna ek olarak, veri toplama ve çok sayıda katılan çok sayıda karar destek sorgu belirtir.Ayrıca, karar destek sistemi bazen içeren birçok sütun ya da büyük olan sütunlar ile geniş tablolar veya her ikisini de.Bu sütun dar alt küme küme küme başvuru sorguları sorgu veya dar bir üst bu sütun yalnızca sütunları içeren dizinli görünüm'den yararlanabilirsiniz.Tek bir sütun alt küme küme küme kümesini içeren dar dizin oluşturulmuş görünümler oluşturma tablo olarak bilinen bir Dikey bölümleme strateji böler, çünkü tablos dikey olarak.Örneğin, aşağıdaki tablo ve dizinli görünüm göz önünde bulundurun:

    CREATE TABLE wide_tbl(a int PRIMARY KEY, b int, ..., z int)
    CREATE VIEW v_abc WITH SCHEMABINDING AS
    SELECT a, b, c
    FROM dbo.wide_tbl
    WHERE a BETWEEN 0 AND 1000
    CREATE UNIQUE CLUSTERED INDEX i_abc ON v_abc(a)
    

    Aşağıdaki sorgu kullanarak yalnızca yanıtlanmış v_abc:

    SELECT b, count_big(*), SUM(c)
    FROM wide_tbl 
    WHERE a BETWEEN 0 AND 1000
    GROUP BY b
    

    Görünüm v_abc Tablo'den çok daha az sayfa kaplayan wide_tbl.Bu nedenle, önceki sorguyu çözmek için bir erişim yol seçmek en iyi duruma getiricisi için daha iyi olabilir.

    Tam bir tablo yerine alt küme küme küme kümesini, dikey olarak bölmek istiyorsanız, dizinli görünüm yerine istediğiniz sütunları eklemek için bir INCLUDE yan tümce tümce tümce kullanan tablo kümelenmemiş dizin kullanmanızı öneririz.Daha fazla bilgi için bkz: CREATE INDEX (Transact-SQL).

Dizin oluşturulmuş görünümler genellikle aşağıdaki sorgu türleri performansını artırmak:

  • Birçok Yazar sahip oltp sistemler.

  • Birçok güncelleştirmelerine sahip veritabanları.

  • Toplamalardan veya birleşimler ilişkin sorgular.

  • Verileri ile sıkı bir grupla anahtar için kardinalite toplamalardan.Yüksek derecede kardinalite anahtar birçok farklı değerler içeren anlamına gelir.Her anahtar farklı bir değer olduğu için benzersiz bir anahtar olası en yüksek kardinalite derecesi vardır.Dizin oluşturulmuş görünümler bir sorgusu var için satır sayısını azaltarak performansı artırır erişebilirsiniz.Görünüm sonuç küme az performans yararı görünümünü kullanarak, temel tablo neredeyse kadar satır sahiptir.Örneğin, 1000 satırları içeren bir tablo üzerinde aşağıdaki sorgu göz önünde bulundurun:

    SELECT PriKey, SUM(SalesCol)
    FROM ExampleTable
    GROUP BY PriKey
    

    Tablo anahtar kardinalite 100 ise, bu sorgu sonucunu kullanılarak oluşturulan dizinli görünüm yalnızca 100 satır yoktur.Ortalama bir onuncu temel tablo karşı gerekli okuma görünümü kullanan sorguları gerektirir.Anahtarın benzersiz bir anahtar anahtarın kardinalite 1000 ise ve Görünüm sonuç küme 1000 satır döndürür.Görünüm ve ExampleTable temel tablo satırları eşit boyutta olması, bir sorgusu var hiçbir performans kazanç kullanarak bu dizinli görünüm, doğrudan okuma temel tablo.

  • Birleşimler genişletiliyor.Bunlar temel tablolardaki özgün verileri daha büyük sonuç kümeleri içeren görünümlerdir.

Birleşen dizin oluşturulmuş görünümler ile sorgular

Dizine alınması için çok görünüm türlerini kısıtlamalar tam sorunu çözdü görünümü tasarlama dan engel olabilir, ancak bu işlem hızını bölümlerini birden çok daha küçük dizin oluşturulmuş görünümler tasarlamak mümkün olabilir.

Aşağıdaki örnekleri göz önünde bulundurun:

  • Sık yürütülen sorgu verileri bir veritabanında toplar, başka bir veritabanındaki verileri toplayan ve sonra sonuçlar katılır.dizinli görünüm tabloları birden fazla veritabanından başvuru yapamazsınız çünkü tüm işlem gerçekleştirmek için tek bir görünümde tasarlayamazsınız.Ancak, o veritabanı için toplama yapar her veritabanında dizinli görünüm oluşturabilirsiniz.En iyi duruma getiricisi eşleştirebilirse dizinlenmiş varolan sorguları, en azından toplama görüntüler işleme speeded varolan sorguları recode gereksinimi.birleştirmek işlemi daha hızlı olmasına rağmen dizin oluşturulmuş görünümler depolanan toplamalardan kullandığından, Genel sorgu daha hızlı olur.

  • Sık yürütülen bir sorgu, birden fazla tablodan veri toplayan ve BİRLİĞİ sonuçlar birleştirmek için kullanır.UNION, dizinli görünüm içinde izin verilir.Her biri tek tek toplama işlemleri yapmak için görünümleri yeniden tasarlayabilirsiniz.En iyi duruma getiricisi sorgu sorgular recode için bir gereksinim olmadan hızlandırmak için dizin oluşturulmuş görünümler daha sonra seçebilirsiniz.UNION işlemi geliştirildi, ancak tek tek toplama işlemleridir.

Birden çok işlem karşılayan dizin oluşturulmuş görünümler tasarlamak.Bile, from yan tümce tümce tümcesinde belirtilen değil, en iyi duruma getiricisi dizinli görünüm nedeni, iyi tasarlanmış bir dizinli görünüm çok sayıda sorgu işlenmesini hızlandırabilirsiniz.

Örneğin, aşağıdaki görünüm üzerinde bir dizin oluşturmayı göz önünde bulundurun:

CREATE VIEW ExampleView WITH SCHEMABINDING
AS
SELECT GroupKey, SUM(Colx) AS SumColx, COUNT_BIG(Colx) AS CountColx
FROM MyTable
GROUP BY GroupKey

Bu görünüm karşılamak doğrudan başvuru sütunları görüntülemek sorgular, sorgu sorgular gerçekleştirmek için de kullanılabilir yalnızca temel tablo gibi ifadeler içeren ve SUM(Colx), COUNT_BIG(Colx), COUNT(Colx), ve AVG(Colx).Tüm sorgular, yalnızca küçük, temel tablodan satır sayısı tam okuma görünümünde satır sayısını almak sahip oldukları için daha hızlı olacaktır.

Benzer şekilde, veri ve gruplar tarafından gün toplayan dizinli görünüm 7, 30 ve 90 gün gibi birden fazla 1 gün birkaç farklı aralıklarına üzerinden toplu sorgularını karşılamak için kullanılır.