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

Dizin oluşturulmuş görünüm oluşturma açıklanmıştır SQL Server 2012kullanarak Transact-SQL. Bir görünüm oluşturulmuş ilk dizin benzersiz kümelenmiş bir dizin olmalıdır. Benzersiz kümelenmiş dizin oluşturulduktan sonra ek kümelendirilmemiş dizinler oluşturabilirsiniz. Görünümün kümelenmiş bir dizin olan bir tablonun saklı olduğu aynı şekilde veritabanında depolanan bir görünüme benzersiz kümelenmiş dizin oluşturma sorgu performansı artırır. Query optimizer kadar sorgu yürütme hızlandırmak için dizin oluşturulmuş görünümler kullanabilirsiniz. Görünümü, sorgu Doktoru bu görünümü için bir ikame dikkate almak için başvurulacak yok.

Bu Konuda

  • Başlamadan Önce

    Sınırlamalar ve Kısıtlamalar

    Öneriler

    Dikkate Alınacak Noktalar

    Güvenlik

  • Dizin oluşturulmuş bir oluşturmak için kullanarak görüntüleyin:

    Transact-SQL

Başlamadan Önce

Aşağıdaki adımlar, dizin oluşturulmuş görünüm oluşturmak için gereklidir ve dizinlenmiş görünümün başarıyla uygulanması için Kritik:

  1. set seçenekleri görünümde başvurulan tüm varolan tablolar için doğru olduğunu doğrulayın.

  2. set seçenekleri oturum için doğru yeni tablo ve görünüm oluşturmadan önce doğrulayın.

  3. Görünüm tanımını deterministik olduğunu doğrulayın.

  4. Görünüm WITH SCHEMABINDING seçeneğini kullanarak oluşturun.

  5. Benzersiz kümelenmiş dizin üzerinde görünüm oluşturun.

Dizin oluşturulmuş görünümler için gerekli set seçenekleri

Aynı ifade değerlendirme farklı sonuçlar üretebilir Veritabanı Altyapısıfarklı set seçenekleri etkin değilse ne zaman sorgu yürütüldüğünde. Örneğin set seçenek CONCAT_NULL_YIELDS_NULL on, ifade için ayarlanır sonra 'abc' + null null değerini döndürür. Ancak, CONCAT_NULL_YIEDS_NULL off için ayarlanır sonra aynı ifadeyi üreten 'abc'.

Doğru tutulabilir ve tutarlı sonuçlar görüşlerini emin olmak için dizin oluşturulmuş görünümler için birkaç ayarlama seçenekleri sabit değerleri gerektirir. set seçenekleri aşağıdaki tabloda gösterilen değerlere ayarlanmalıdır gereklideğeri aşağıdaki koşullar gerçekleştiğinde sütunu:

  • Görünümü ve sonraki görünümü dizinler oluşturulur.

  • Orada herhangi bir ekleme, güncelleştirme veya silme işlemi gerçekleştirilen dizinli görünüme katılan bir tabloyu. Bu toplu kopyalama, çoğaltma ve dağıtılmış sorgular gibi işlemleri içerir.

  • Dizin oluşturulmuş görünüm sorgu en iyi duruma getiricisi tarafından sorgu planı üretmek için kullanılır.

    SET seçenekleri

    Gerekli değer

    Varsayılan sunucu değerini

    Default

    ole db ve odbc değer

    Default

    db Kitaplığı değer

    ANSI_NULLS

    ON

    ON

    ON

    OFF

    ANSI_PADDING

    ON

    ON

    ON

    OFF

    ANSI_WARNINGS *

    ON

    ON

    ON

    OFF

    ARITHABORT

    ON

    ON

    OFF

    OFF

    CONCAT_NULL_YIELDS_NULL

    ON

    ON

    ON

    OFF

    NUMERIC_ROUNDABORT

    OFF

    OFF

    OFF

    OFF

    QUOTED_IDENTIFIER

    ON

    ON

    ON

    OFF

    Veritabanı uyumluluk düzeyi 90 veya daha yüksek olarak ayarlandığında ANSI_WARNINGS on olarak örtülü ayarı ARITHABORT on olarak ayarlar.

Bir ole db veya odbc sunucusu bağlantısı kullanıyorsanız, değiştirilmesi gerekir sadece ARITHABORT ayarı değerdir. Tüm db Kitaplığı değerleri doğru sunucu düzeyinde ya da kullanılarak ayarlanmalıdır sp_configure veya set komutunu kullanarak uygulama. set seçenekleri hakkında daha fazla bilgi için bkz: Using Options in SQL Server.

Önemli notÖnemli

ARITHABORT kullanıcı seçenek sunucu bazındaki on ilk görünümü dizine veya hesaplanmış bir sütun üzerinde dizin sunucusundaki bir veritabanı oluşturulur olarak ayarlanması önerilir.

Deterministik bakıldı

Dizin oluşturulmuş görünüm tanımını deterministik olması gerekir. Bir görünüm seç listesinde, eğer tüm deterministik ifadeleridir yanı sıra nerede ve group by yan tümceleri, deterministik. Deterministik ifadeler her zaman belirli bir giriş değerleri kümesiyle değerlendirilen her zaman aynı sonucu döndürür. Sadece deterministic işlevler deterministic ifadelerde katılabilir. Örneğin, her zaman onun üç parametre bağımsız değişkeni değerleri verilen herhangi bir dizi için aynı sonucu verdiği için dateadd işlevini deterministic olur. getdate deterministic değil, çünkü hep aynı argüman, ancak her zaman yürütülecek olan değişiklikleri döndürdüğü değeri ile çağrılır.

Kullanım IsDeterministic özelliği columnproperty görünümü sütun deterministic olup olmadığını belirlemek için işlevi. Kullanım IsPrecise Şema Cilt görünümüyle deterministik bir sütunda kesin olup columnproperty işlevi özelliği. columnproperty geçersiz giriş için doğru ise 1, yanlış ise 0 ve null döndürür. Sütun deterministic ya da değil kesin değil yani.

İfade deterministik, kayan nokta ifade, varsa bile kesin sonuç işlemci mimarisi ya microcode sürümüne bağlı olabilir. Veri bütünlüğü sağlamak amacıyla bu tür ifadeler dizinlenmiş görünümler yalnızca anahtar olmayan sütun olarak katılabilir. Kayan nokta ifade içermeyen deterministik ifadeleri kesin olarak adlandırılır. Sadece kesin deterministik ifadeleri anahtar sütunları ve nerede katılabilir veya group by yan tümceleri dizinlenmiş görünümler.

Ek gereksinimler

set seçenekleri ve deterministic işlevi gereksinimleri yanı sıra, aşağıdaki gereksinimlerin karşılanması gerekir:

  • create INDEX yürütür kullanıcı görünümü sahibi olmalıdır.

  • Dizin oluşturduğunuzda, IGNORE_DUP_KEY seçeneğini (varsayılan ayar) olarak ayarlanmalıdır.

  • Temel tablolarda doğru set seçenekleri olması gerekir zaman tablosu oluşturulur veya şema bağlama ile görünüm tarafından başvurulamaz.

  • Tablolar Şemaiki bölümü adları tarafından başvurulan schema**.**tablename, view definition.

  • Kullanıcı tanımlı işlevler, WITH SCHEMABINDING seçeneğini kullanarak oluşturulmalıdır.

  • Kullanıcı tanımlı işlevler Şemaiki bölümü adları tarafından başvurulan schema**.**function.

  • WITH SCHEMABINDING seçeneğini kullanarak görünüm oluşturulmalıdır.

  • Görünüm, yalnızca aynı veritabanında, diğer görünümler temel tabloları başvuru gerekir.

  • Görünüm tanımını birini içermemelidir:

    COUNT(*)

    Satır kümesi işlevi

    Türetilmiş bir tablo

    birleşim

    FARKLI

    STDEV, VARYANS, AVG

    float*, text, ntext, or image columns

    Alt sorgu

    tam metin yüklemler (içeren, freetext)

    NULL olabilecek ifade üzerinde topla

    clr kullanıcı tanımlı toplama işlevi

    Sayfanın Üstü

    MIN, MAX

    UNION

    * Dizinlenmiş görünümün içerebilir floatsütunları; Ancak, bu tür sütunları Kümelenmiş dizin anahtar eklenemez.

  • group by varsa, görünüm tanımını COUNT_BIG(*) içermelidir ve HAVING içermemelidir. Bu grupla kısıtlamalar yalnızca dizin oluşturulmuş görünüm tanımı için geçerli. Bu grupla kısıtlamalar tatmin etmez bile sorgu ve yürütme planı dizin oluşturulmuş görünüm kullanabilirsiniz.

  • Görünüm tanımının select deyiminde group by yan tümcesi belirtirse, benzersiz kümelenmiş dizin anahtarı yalnızca group by yan tümcesinde belirtilen sütunlara başvurabilir.

  • Görünüm tanımını bir group by yan tümcesi içeriyorsa, benzersiz kümelenmiş dizin anahtarı yalnızca group by yan tümcesinde belirtilen sütunlara başvurabilir.

Öneriler

Ne zaman başvurmak için datetimeve smalldatetimedize harflerin dizin oluşturulmuş görünümler, öneririz size açıkça bire bir deterministik Tarih biçimi stili kullanarak istediğiniz tarihi türe dönüştürmek ki. Deterministic Tarih biçimi stiller listesi için bkz: CAST ve CONVERT (Transact-SQL). Örtük dönüştürme karakter dizeleri içeren ifadeler datetimeya smalldatetimenondeterministic düşünülür. Bu sonuçlar bağlıdır çünkü dili ve dateformat ayarları sunucu oturumu. Örneğin, deyimin sonuçlarına CONVERT (datetime, '30 listopad 1996', 113)Dil çünkü bağlıdır dize 'listopad' farklı diller için farklı aylarda anlamına gelir. Benzer şekilde, ifadesinde DATEADD(mm,3,'2000-12-01'), SQL Serverdize yorumlayan '2000-12-01'dateformat ayarına göre.

Unicode karakter veri harmanlamaları arasında örtülü dönüşüm de nondeterministic kabul edilir.

Bu örtük dönüştürme ifadeler içeren görüşlere dizinler oluşturma uyumluluk düzeyi 90 ve daha yüksek izin verilmez. Ancak, yükseltilen veritabanından alınan bu ifadeler içeren varolan görünümleri bakımı. Tarihi dönüştürmeleri örtük dize içeren dizin oluşturulmuş görünümler kullanırsanız, dil ve Tarih biçimi ayarları, veritabanları ve uygulamaları olası dizin oluşturulmuş görünüm bozulmasını önlemek için tutarlı olduğunu emin olun.

Dikkate Alınacak Noktalar

Ayarı large_value_types_out_of_row dizin oluşturulmuş görünüm sütunlar seçeneği karşılık gelen sütun temel tablo ayarı kalıtsal. Bu değer kullanılarak ayarlanır sp_tableoption. İfadelerinden oluşan sütunlar varsayılan ayarı 0'dır. Bu büyük bir değer türü satır içinde saklı olduğu anlamına gelir.

Dizin oluşturulmuş görünümler bölümlenmiş bir tablo oluşturulabilir ve kendilerini bölümlenebilir.

Önlemek için Veritabanı AltyapısıDizinli görünümleri kullanarak, sorgu seçeneği (görünümler genişletin) ipucu içerir. Listelenen seçeneklerden birini yanlış ayarlanmışsa, Ayrıca bu iyileştirici hit dizinleri kullanarak engeller. SEÇENEK (görünümler genişletin) İpucu hakkında daha fazla bilgi için bkz: select (Transact-sql).

Tüm dizinler bir görünüm, görünüm bırakılan bırakılır. Kümelenmiş dizin bırakılan her kümelendirilmemiş dizinleri ve görünümünde otomatik oluşturulan istatistikleri bırakılır. Kullanıcı tarafından oluşturulan istatistikleri görünüm korunur. Kümelendirilmemiş dizinler için ayrı ayrı düştü. Saklı sonuç kümesi görünüm üzerinde Kümelenmiş dizin bırakarak kaldırır ve Doktoru gibi standart bir görünümü görünüm işleme için döndürür.

Tablolar ve görünümler üzerinde dizinler devre dışı bırakılabilir. Tablo kümelenmiş bir dizin devre dışı bırakıldığında, tabloyla ilişkilendirilmiş görünümlerde dizinleri de devre dışı bırakılır.

Güvenlik

İzinler

create VIEW izni veritabanında ve görünümü oluşturulmaktadır şema alter izni gerektirir.

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

Transact-SQL'i Kullanma

Dizin oluşturulmuş görünüm oluşturma

  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. Örnek görünümü Bu görünüm dizin oluşturur. İki sorgu dahil dizinlenmiş görünümün kullanın.

    USE AdventureWorks2012;
    GO
    --Set the options to support indexed views.
    SET NUMERIC_ROUNDABORT OFF;
    SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,
        QUOTED_IDENTIFIER, ANSI_NULLS ON;
    GO
    --Create view with schemabinding.
    IF OBJECT_ID ('Sales.vOrders', 'view') IS NOT NULL
    DROP VIEW Sales.vOrders ;
    GO
    CREATE VIEW Sales.vOrders
    WITH SCHEMABINDING
    AS
        SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Revenue,
            OrderDate, ProductID, COUNT_BIG(*) AS COUNT
        FROM Sales.SalesOrderDetail AS od, Sales.SalesOrderHeader AS o
        WHERE od.SalesOrderID = o.SalesOrderID
        GROUP BY OrderDate, ProductID;
    GO
    --Create an index on the view.
    CREATE UNIQUE CLUSTERED INDEX IDX_V1 
        ON Sales.vOrders (OrderDate, ProductID);
    GO
    --This query can use the indexed view even though the view is 
    --not specified in the FROM clause.
    SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev, 
        OrderDate, ProductID
    FROM Sales.SalesOrderDetail AS od
        JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID
            AND ProductID BETWEEN 700 and 800
            AND OrderDate >= CONVERT(datetime,'05/01/2002',101)
    GROUP BY OrderDate, ProductID
    ORDER BY Rev DESC;
    GO
    --This query can use the above indexed view.
    SELECT  OrderDate, SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev
    FROM Sales.SalesOrderDetail AS od
        JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID
            AND DATEPART(mm,OrderDate)= 3
            AND DATEPART(yy,OrderDate) = 2002
    GROUP BY OrderDate
    ORDER BY OrderDate ASC;
    GO
    

Daha fazla bilgi için, bkz. CREATE VIEW (Transact-SQL).

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

Ayrıca bkz.

Başvuru

Index (Transact-sql) oluştur

SET ANSI_NULLS (Transact-SQL)

set ANSI_PADDING (Transact-sql)

set ANSI_WARNINGS (Transact-sql)

set ARITHABORT (Transact-sql)

set CONCAT_NULL_YIELDS_NULL (Transact-sql)

set NUMERIC_ROUNDABORT (Transact-sql)

set QUOTED_IDENTIFIER (Transact-sql)