Udostępnij za pośrednictwem


Tworzenie indeksowanych widoki

Widok muszą spełniać następujące wymagania, aby można było utworzyć indeks klastrowany na niej:

  • Opcje ANSI_NULLS i QUOTED_IDENTIFIER muszą być zestaw on kiedy wykonano instrukcję CREATE VIEW.Funkcja OBJECTPROPERTY raportów to widoków za pomocą ExecIsAnsiNullsOn or ExecIsQuotedIdentOn właściwości.

  • Opcja ANSI_NULLS musi zostały ustawione na ON do wykonania wszystkich instrukcji CREATE tabela, utworzyć tabele, do których odwołuje się w widoku.

  • W widoku musi nie odwołują się inne widoki, tylko na podstawie tabel.

  • Wszystkich tabel bazowych odwołuje się w widoku musi znajdować się w tej samej bazy danych jako widok i mieć tego samego właściciela jako widok.

  • W widoku musi zostać utworzony przy użyciu opcji SCHEMABINDING.wiązanie schematu wiąże widoku schematu z tabel podstawowych.

  • Funkcje zdefiniowane przez użytkownika, do którego odwołuje się w widoku musi być utworzony przy użyciu opcji SCHEMABINDING.

  • Tabele i funkcji zdefiniowanych przez użytkownika musi odwoływać się nazwy dwóch elementów w widoku.Jedna część, trzy części i four-part nazwy nie są dozwolone.

  • Wszystkie funkcje, które odwołują się wyrażenia w widoku musi być deterministyczny.The IsDeterministic właściwość of the OBJECTPROPERTY funkcja reports whether a user-defined funkcja is deterministic.Aby uzyskać więcej informacji zobaczDeterministic and Nondeterministic Functions.

    Uwaga

    Przy odwoływaniu się do datetime i smalldatetime Literały ciągów znaków w Widoki indeksowane w SQL Server 2008, firma Microsoft zaleca, aby jawnie przekonwertować literał na typ data przy użyciu stylu format data deterministyczny. Aby uzyskać listę deterministyczny stylów formatowania data Zobacz CAST and CONVERT (Transact-SQL). Wyrażenia, które obejmują niejawna konwersja ciągów znaków do datetime lub smalldatetime są uważane za nondeterministic, chyba że jest poziom zgodności zestaw 80 lub wcześniej. Dzieje się tak, ponieważ wyniki zależą od ustawień LANGUAGE i DATEFORMAT sesja serwera.Na przykład wyniki wyrażenie CONVERT (datetime, '30 listopad 1996', 113) zależą od ustawienia języka, ponieważ ciąg "listopad"oznacza miesiącami w różnych językach. Podobnie w wyrażeniu DATEADD(mm,3,'2000-12-01'), SQL Server interpretuje ciąg '2000-12-01' w zależności od ustawienia DATEFORMAT.

    Niejawna konwersja nie obsługujących kodu Unicode znaku danych między sortowania jest również za nondeterministic, chyba że ustawiony jest poziom zgodności 80 lub wcześniej.

    Tworzenie indeksów w widokach, które zawierają te wyrażenia nie jest dozwolona w trybie zgodności z 90.Jednak maintainable są istniejące widoki, które zawierają te wyrażenia uaktualnionej bazy danych.Jeśli używasz widoków indeksowanych, zawierające ciąg niejawna do konwersji data, należy upewnić się, że ustawienia LANGUAGE i DATEFORMAT są zgodne z bazy danych i aplikacji, aby uniknąć uszkodzenia możliwe widok indeksowany.

  • Jeśli korzysta z definicji widoku funkcja agregująca, lista wyboru musi również zawierać COUNT_BIG **.

  • Właściwość dostępu danych funkcja zdefiniowanej przez użytkownika muszą być NO SQL, a właściwość dostępu zewnętrznego musi być No.

  • Typowe funkcje czasu wykonania (CLR) języka mogą być wyświetlane na liście select w widoku, ale nie może być częścią definicji wskazywanym przez indeks klastrowany.Funkcje środowiska CLR nie może występować w klauzula WHERE, widoku lub klauzula ON operacji łączyć w widoku.

  • Funkcje środowiska CLR i metody używane w definicji widoku typów zdefiniowanych przez użytkownika CLR muszą mieć właściwości zestaw jak to pokazano w poniższej tabela.

    Właściwość

     Uwaga 

    DETERMINISTYCZNY = TRUE

    Must be declared explicitly as an attribute of the Microsoft .NET Framework method

    DOKŁADNE = TRUE

    Musi być jawnie zadeklarowany jako atrybut .NET Framework Metoda.

    DOSTĘP DO DANYCH = NIE SQL

    Określona przez ustawienie DataAccess atrybut DataAccessKind.None and SystemDataAccess atrybut SystemDataAccessKind.None.

    ZEWNĘTRZNY DOSTĘP = NIE

    Domyślnie właściwość ta nie dla środowiska CLR procedur.

    Aby uzyskać więcej informacji na temat ustawiania atrybutów CLR rutynowych metod, zobacz Niestandardowe atrybuty dla środowiska CLR procedur.

    Ostrzeżenie

    Nie zaleca się ustawienie właściwości metod rutynowych CLR sprzeczne działanie metoda.W ten sposób może doprowadzić do uszkodzenie danych.

  • Instrukcja SELECT w widoku nie może zawierać następujące elementy Transact-SQL elementy składni:

    • * Lub table_name**.** * składni, aby określić kolumny.Nazwy kolumn muszą być podane w sposób jawny.

    • Nie można określić nazwę kolumna tabela używana jako proste wyrażenie w więcej niż jednej kolumna w widoku.kolumna można odwoływać się kilka razy pod warunkiem, że wszystkie lub wszystkich, ale jedno odwołanie do kolumna jest częścią złożone wyrażenie lub parametr do funkcja.Na przykład na poniższej liście select nie jest prawidłowy:

      SELECT ColumnA, ColumnB, ColumnA
      

      Ważne jest to lista wyboru:

      SELECT SUM(ColumnA) AS SumColA, ColumnA % ColumnB AS ModuloColAColB, COUNT_BIG(*) AS cBig FROM dbo.T1 GROUP BY ModuloColAColB
      
    • Wyrażenie kolumna, użyte w klauzula GROUP BY, lub wyrażeniu wyniki agregacja.

    • tabela pochodnej.

    • Typowe tabela wyrażenie (CTE).

    • Funkcje zestawu zestaw wierszy.

    • UNION, z wyjątkiem lub PRZETNIJ operatorów.

    • Podkwerendy.

    • Sprzężenia zewnętrzne lub samodzielnie.

    • Klauzula TOP.

    • Klauzula ORDER BY.

    • Słowo kluczowe DISTINCT.

    • COUNT (COUNT_BIG(*) jest dozwolona.)

    • Funkcje agregujące AVG, MAX, MIN, STDEV, STDEVP, VAR lub WARIANCJA.POPUL.Jeśli AVG ()expression) jest określony w kwerendach odwoływania się do widok indeksowany Optymalizator może często obliczania potrzebnych wyników, jeśli na liście Wybierz widok zawiera SUM ()expression) i COUNT_BIG ()expression). Na przykład na liście SELECT widok indeksowany nie może zawierać wyrażenie AVG(column1).Jeśli lista wyboru widoku zawiera wyrażeń SUM(column1) i COUNT_BIG(column1), SQL Server Umożliwia obliczenie średniej dla kwerendy, która odwołuje się do widoku i określa AVG(column1).

    • Funkcja suma, która odwołuje się do pustych wyrażenie.

    • Klauzula OVER, zawierającego funkcje okno ranking lub agregacja.

    • Środowisko CLR użytkownika agregacja funkcja.

    • Predykaty pełnego tekstu CONTAINS lub FREETEXT.

    • Klauzula COMPUTE lub COMPUTE BY.

    • Operatory pytania mają zastosowania lub OUTER mają zastosowania.

    • Operatory PIVOT lub UNPIVOT

    • Tabela wskazówki dotyczące serwerów (dotyczy tylko poziom zgodności, 90 lub nowszej).

    • Dołącz wskazówek.

    • Bezpośredniego odniesienia do Xquery wyrażeń.Odwołania do pośrednich, takich jak wyrażenia Xquery wewnątrz funkcja zdefiniowanej przez użytkownika związanych ze schematem są akceptowane.

  • Jeśli GROUP BY jest określony, lista wyboru widoku musi zawierać wyrażenie COUNT_BIG(*) i definicji widoku nie można określić HAVING, ROLLUP, moduł lub zestawy grupowanie.

Wymagania dla instrukcja CREATE INDEX

Indeks pierwszego, utworzone w widoku musi być unikatowy indeks klastrowany.Po unikatowy indeks klastrowany został utworzony, można utworzyć dodatkowe nonindeks klastrowanyes.Konwencje nazewnictwa dla indeksów w widokach są takie same, jak w przypadku indeksy dla tabel.Jedyną różnicą jest to, że nazwa tabela jest zastępowany nazwę widoku.Aby uzyskać więcej informacji zobaczCREATE INDEX (języka Transact-SQL).

Instrukcja CREATE INDEX muszą spełniać następujące wymagania, a także zwykłe wymagania CREATE INDEX:

  • Użytkownik wykonujący instrukcja CREATE INDEX musi być właściciela widoku.

  • Następujące opcje zestaw musi być ustawiony na włączone, po wykonaniu instrukcja CREATE INDEX:

    • ANSI_NULLS

    • ANSI_PADDING

    • ANSI_WARNINGS

    • CONCAT_NULL_YIELDS_NULL

    • QUOTED_IDENTIFIER

  • Opcja NUMERIC_ROUNDABORT musi być zestaw na OFF.Jest to ustawienie domyślne.

  • Jeśli baza danych działa w trybie zgodności z 80 lub starszym, opcja ARITHABORT musi być zestaw on.

  • Po utworzeniu indeks klastrowany lub nieklastrowany opcja IGNORE_DUP_KEY musi być zestaw do OFF (domyślne zestaw ting).

  • W widoku nie może zawierać text, ntext, lub image kolumny, nawet jeśli nie są one wywoływane w instrukcja CREATE INDEX.

  • Jeśli w instrukcja SELECT w definicji widoku określono klauzula GROUP BY, klucz unikatowy indeks klastrowany może odwoływać się tylko kolumn określonych w klauzula GROUP BY.

  • kolumna przechowywanej w podstawowej tabela, będącej podstawą widoku musi odwoływać się nieprecyzyjne wyrażenie, które stanowi wartość kolumna kluczy indeksu.Ta kolumna może być regularnie kolumny przechowywanej lub utrwalona kolumna obliczana.Inne wyrażenia nieprecyzyjne może być częścią klucz kolumna widok indeksowany.

Uwagi

Ustawienie large_value_types_out_of_row opcji z kolumna w widoku indeksowanym jest dziedziczona z ustawienie odpowiedniej kolumna w tabela bazowa.Ta wartość jest ustawiana za pomocą sp_tableoption.Ustawieniem domyślnym dla kolumn z wyrażenia jest równa 0.Oznacza to, że duża wartość typu są przechowywane w wierszu.Aby uzyskać więcej informacji zobaczUsing Large-Value Data Types.

After the clustered index is created, any connection that tries to modify the base data for the view must also have the same option settings required to create the index.SQL Server generates an error and rolls back any INSERT, UPDATE, or DELETE statement that will affect the result set of the view if the connection executing the statement does not have the correct option settings.Aby uzyskać więcej informacji zobaczSET Options That Affect Results.

Wszystkie indeksy w widoku są usuwane, gdy widok zostanie usunięte.Wszystkie ponownego zbudowania indeksów nie klastrowanych i tworzony automatycznie statystyk w widoku są usuwane, gdy indeks klastrowany zostanie usunięte.Statystyki utworzone przez użytkownika w widoku są obsługiwane.Może być indywidualnie odrzucone ponownego zbudowania indeksów nie klastrowanych.Upuszczanie indeks klastrowany w widoku spowoduje usunięcie zestaw wyników przechowywane, a Optymalizator powraca do przetwarzania widoku, podobnie jak w widoku standardowym.

Chociaż kolumny wchodzące w skład klucz indeks klastrowany są określone w instrukcja CREATE UNIQUE INDEX KLASTROWANYCH, zestaw wyników Pełny widok jest przechowywany w bazie danych.Zgodnie z indeksem klastrowanym dla tabela bazowa struktury B-drzewo indeks klastrowany zawiera tylko kolumny klucz, ale wiersz danych zawiera wszystkie kolumny w widoku zestaw wyników.

Jeśli chcesz dodać indeksy do widoków w istniejącym systemie schematu należy powiązać dowolnego widoku, w którym chcesz umieścić indeksu.Można wykonywać następujące operacje:

  • Ponownie ją określając WITH SCHEMABINDING i upuść w widoku.

  • Można utworzyć drugi widok, który ma ten sam tekst, jak istniejącego widoku, ale pod inną nazwą.Optymalizator bierze pod uwagę indeksów dla nowego widoku, nawet jeśli nie jest ona bezpośrednio wywoływane w klauzula FROM kwerendy.

    Uwaga

    Widoki lub tabele uczestniczące w widoku utworzone za pomocą klauzula SCHEMABINDING nie zostanie usunięty, chyba że w widoku jest usunięte lub zmienione tak, aby go nie ma już wiązanie schematu.Ponadto instrukcji ALTER tabela na tabele uczestniczące w widokach o wiązanie schematu zakończy się niepowodzeniem, jeśli instrukcje te mają wpływ na definicję widoku.

Użytkownik powinien upewnić się, że nowy widok spełnia wszystkie wymagania widok indeksowany.Może to wymagać, aby zmienić własność widoku i wszystkich tabel bazowych odwołuje się tak, aby je wszystkie własnością tego samego użytkownika.

Indeksy na tabele i widoki mogą być wyłączone.Po wyłączeniu indeksem klastrowanym dla tabela indeksów w widokach skojarzonych z tabelą także są wyłączone.Aby uzyskać więcej informacji zobaczDisabling Indexes.

Przykład

Poniższy przykład tworzy widok i indeks w tym widoku.Uwzględniane są dwie kwerendy, należy użyć widok indeksowany.