Aracılığıyla paylaş


Görünümleri tasarlama dizin

Görünümler olarak da bilinen sanal tablolar, çünkü sonucu küme tarafından döndürülen satır ve sütun içeren bir tablo olarak aynı genel form görünümü vardır ve görünümler gibi yalnızca SQL deyimlerini tablolarda başvurulabilir.Sonuç küme standart bir görünüm veritabanında kalıcı olarak depolanmaz.Her sorguda bir standart görünüme başvuruyor. SQL Server değiştirilen sorgu biçimlendirilmiş kadar yalnızca başvuruları, tablolar temel sorgu görünüme tanımını dahili olarak kullanır. Dosya daha sonra sonuçta elde edilen sorgu her zamanki gibi çalışır.Daha fazla bilgi için bkz:Görüntüleme ve çözümleme.

Standart bir görünümü, dinamik olarak sonuç oluşturma yükünü küme için her sorgu bir görünüme başvuruyor, çok sayıda satır büyük miktarda veri toplamak veya çok sayıda katılma gibi karmaşık işlenmesini ilgili görünümler için önemli olabilir.Bu gibi görünümleri sorgularda sık başvurulan, görünüm üzerinde benzersiz bir kümelenmiş dizin oluşturarak performansı artırabilir.Benzersiz bir kümelenmiş dizin bir görünüm oluşturduğunuzda, yalnızca bir kümelenmiş dizini olan bir tablo depolanan gibi sonuç kümesi veritabanında depolanır.

Görünüm dizin oluşturma, başka bir yararı, iyileştirici Görünüm dizin doğrudan FROM yan tümce görünümündeki ad sorgularını kullanarak başlatır kullanılabilmesidir.Varolan sorguları, veri alma iyileştirilmiş verimliliği'dan yararlanabilir dizinli görünüm recoded gerek kalmadan.Daha fazla bilgi için bkz:Görünümler, bir ındexes çözümleniyor.

Temel tablolardaki verileri değişiklik yapıldıkça, veri değişiklikleri dizinlenmiş görünümün içinde depolanan verileri yansıtılır.Gereksinimin görünümün kümelenmiş dizin benzersiz olması, verimliliği artırır SQL Server satırları, herhangi bir veri değişikliği tarafından etkilenen dizininde bulabilirsiniz.

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

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

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

    Bu görünüm için oluşturulan bir dizin için:

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

    skaler kullanıcı tanımlı işlevler içeren ifadeler de benzer bir biçimde eşlenmesi.

  • skaler toplamak işlevleri.skaler bir toplamak işlev, SELECT listesindeki'i içeren, şu sorgu:

    SELECT COUNT_BIG (*) FROM dbo.TableT
    

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

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

sorgu iyileştiricisi a query plan seçtiğinde, aşağıdakileri de dikkate alacaktır:

  • Değerler aralığını tanımlanmış olup olmadığını, dizinli görünüm içinde tanımlanan bir aralık içindeki bir sorgu yüklemi döner.Örneğin, aşağıdaki görünüm üzerinde 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
    

    Şimdi, aşağıdaki sorguyu göz önünde bulundurun:

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

    Bu sorgu, görünüm ile sorgu iyileştiricisi eşleşir V1 çünkü arasındaki aralığı 3 ve 7 Sorgu yer arasındaki aralık içinde tanımlanmış 1 ve 10 dizinli görünüm içinde tanımlanır.

  • 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 yok olarak düşünülür.

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

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

    Bu görünüm için oluşturulan bir dizin ile:

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

Tüm dizinler, olduğu gibi anımsanması SQL Server dizinli görünüm, yalnızca sorgu iyileştiricisi bunu yardımcı olup olmadığını belirlerse, sorgu planlamasını kullanmak bunu seçer.

Dizin oluşturulmuş görünümler herhangi bir sürümünde oluşturulmuş SQL Server 2008. Içinde SQL Server 2008 sorgu iyileştiricisi, kuruluş, dizinli görünüm otomatik olarak düşünür. dizinli görünüm tüm diğer sürümleri kullanmak için , NOEXPAND tablo ipucu kullanılmalıdır.

Bir dizinli görünüm tasarlama yönergeleri.

Dizin oluşturulmuş görünümler, alttaki veri sık güncelleştirildiğinde, en iyi çalışır.dizinli görünüm, bakım, bir tablo dizini tutma maliyetini büyük olabilir.dizinli görünüm verileri koruma maliyetini, alttaki veriler sık sık güncelleştirilir, dizinlenmiş görünümün kullanmanın performans üstünlüklerinden outweigh.Temel verileri belirli aralıklarla toplu olarak güncelleştirildi ancak öncelikle salt okunur olarak arasında güncelleştirmeleri kabul, herhangi bir dizin oluşturulmuş görünümler, güncelleştirmek ve daha sonra yeniden oluþturma önce bırakarak göz önünde bulundurun.Böylece güncelleştirmelerin performansını artırabilir.

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

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

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

    Örneğin, envanter kaydı, bir çevrimiçi--işlem (OLTP) veritabanında çok sayıda sorgu katılmak için tahmin ProductMaster, ProductVendor, and VendorMaster tablolar.Bu birleştirmek gerçekleştirir her sorgu çok sayıda işlem olsa da, yüz binlerce gibi sorguları genel birleştirmek işlenmesi önemli olabilir.Bu ilişkiler sık güncelleştirilmesi olası olduğu için tüm sistemin genel performansını birleştirilmiş sonuçlar depolandığı dizinli görünüm tanımlayarak geliştirilmiş.

  • Karar destek iş yüklerini.

    Çözümleme sistemleri sık güncelleştirilen özetlenen, toplanan verileri depolayarak ayırdedilir.Ayrıca, verileri toplamak ve çok sayıda katılma birçok karar destek sorguları belirtir.Ayrıca, sistemleri, bazen çok fazla sütun veya büyük olan sütunlar ile geniş bir tablo içeren karar veya her ikisini de.Bu sütun, dar alt küme küme küme başvuru sorguları sorgu veya bu sütunların dar bir üst yalnızca sütunları içeren dizinli görünüm'den yararlanabilirsiniz.Tek bir tablo sütunlarından bir altkümesini içeren dar dizin oluşturulmuş görünümler oluşturma olarak bilinen bir dikey bölümleme stratejisini çünkü bu tablolara dikey olarak böler.Örneğin, aşağıdaki tabloda ve dizinlenmiş görünümün 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 sorguyu yalnızca kullanmak yanıtlanmasını v_abc:

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

    View v_abc Tablo'den çok daha az sayfa kaplar wide_tbl. Bu nedenle, önceki sorguyu çözmek için bir erişim yol seçilecek en iyi duruma getiricisi için daha iyi olabilir.

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

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

  • Pek çok yazar varsa OLTP sistemlerinde.

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

  • Sorgulamalar toplamalardan veya birleştirme içeren.

  • GROUP BY anahtar için önem düzeyi yüksek ölçüde veri toplamalardan.Bir yüksek önem derecesi, anahtar birçok farklı değerler içeren anlamına gelir.Her anahtar, farklı bir değer olduğundan, olası en yüksek önem derecesi benzersiz BIR anahtar vardır.Dizin oluşturulmuş görünümler için sorguda sahip satır sayısını azaltarak performansı erişebilirsiniz.Görünüm neden oluyorsa küme temel bir tablo olarak hemen çok satır varsa, küçük performans yararı görünümü kullanarak.Örneğin, aşağıdaki sorgu 1.000 satırları olan bir tabloda göz önünde bulundurun:

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

    Önem düzeyini tablo anahtar 100 ise, bu sorgu sonucu kullanılarak oluşturulan bir dizinli görünüm, yalnızca 100 satır yoktur.Görünümü kullanan sorguları, ortalama, temel tablo karşı gerekli okuma bir onuncu gerektirecektir.Anahtar, benzersiz bir anahtardır anahtarının önem 1000'dir ve görünümün sonuç kümesi 1000 satır döndürür.Görünümü ve ExampleTable satırları eşit boyuta sahip olan temel tablo, sorguda temel tablo doğrudan okumak yerine, bu dizinli görünüm kullanılarak elde hiçbir performans.

  • Birleştirmeler genişletiliyor.Bunlar, özgün verileri temel tablolardaki daha büyük boyutlu sonuç kümeleri olan görünümleri.

Birleştirme sorguları görünümleriyle dizine alınmış.

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

Aşağıdaki örnekleri inceleyin:

  • Sık yürütülen bir sorgunun bir veritabanındaki verileri toplayan, başka bir veritabanındaki verileri toplayan ve sonra sonuçlar birleştirir.dizinli görünüm, tablo birden fazla veritabanına başvuramaz olduğundan, tüm işlem gerçekleştirmek için tek Görünüm Tasarla edemiyor.Ancak, dizinli görünüm, o veritabanı için toplama her bir veritabanı oluşturabilirsiniz.Iyileştirici eşleştirebilirse dizinlenmiş varolan sorguları, en az toplama görüntüler işleniyor varolan sorguları recode gereksinimini speeded.birleştirmek işlemi daha hızlı olmasa da, 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 çok tablodan gelen verileri toplayan ve sonuçlar birleştirmek için UNION kullanır.UNION, dizinli görünüm içinde izin verilmiyor.Her biri ayrı bir toplama işlemleri yapmak için görünümleri yeniden tasarlayabilirsiniz.En iyi duruma getiricisi, daha sonra sorgu recode için bir gereksinim olmaksızın sorgular hızlandırmak için dizin oluşturulmuş görünümler seçebilirsiniz.UNION işlemi geliştirilmiştir, ancak tek tek bir toplama işlemleri ' dir.

Birden çok işlemi karşılayan dizin oluşturulmuş görünümler tasarlayın.Iyi tasarımlanmış bir dizinli görünüm, dizinli görünüm iyileştirici kullanabileceğinizden bile FROM yan tümcesinde belirtilmemiş olduğunda çok sayıda sorgu işlemeyi 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

Yalnızca bu görünümü karşılamak sorguları, doğrudan görünümün sütun başvurusu, temel sorgu sorgular tablo ve ifadeler gibi içermesi için de kullanılabilir SUM(Colx), COUNT_BIG(Colx), COUNT(Colx), ve AVG(Colx). Tüm sorgular, yalnızca küçük satır sayısını öğrenmek yerine, temel tablodan satır sayısını tam Okuma görünümünde almak sahip oldukları için daha hızlı olacaktır.

Benzer şekilde, veri ve grupları güne göre toplayan dizinli görünüm, birden çok 1 gün 7, 30 veya 90 gün gibi birkaç farklı aralıklarına üzerinden toplamak sorgularını karşılamak için kullanılabilir.