Tworzenie indeksów kolumny obliczanej

Indeksów można zdefiniować kolumny obliczane jak są spełnione następujące wymagania:

  • Wymagania dotyczące własności

  • Wymagania determinism

  • Wymogi staranności

  • Wymagania dotyczące typu danych

  • Ustawianie opcji wymagania

Wymagania dotyczące własności

Odwołuje się do wszystkich funkcja w kolumna obliczana musi mieć tego samego właściciela jako tabela.

Wymagania determinism

Wyrażenia są przewidywalne, jeśli zawsze zwraca ten sam wynik dla określonego zestaw nakładów.IsDeterministic właściwość COLUMNPROPERTY funkcja raportów czy computed_column_expression jest deterministyczny.

  • computed_column_expression Musi być deterministyczny.A computed_column_expression jest firmy Deterministic Networks, gdy jeden lub więcej z następujących czynności:

    • Wszystkie funkcje, które odwołuje się wyrażenie są przewidywalne i dokładne.Funkcje te obejmują zarówno przez użytkownika i funkcje wbudowane.Aby uzyskać więcej informacji, zobacz Przewidywalne i rodzaju funkcje.Funkcje może być niedokładny, jeśli kolumna obliczana jest ZACHOWYWANE.Aby uzyskać więcej informacji, zobacz Tworzenie indeksów utrwalone kolumn obliczanych dalej w tym temacie.

    • Wszystkie kolumna, które w wyrażenie pochodzą z tabela zawierającej kolumna obliczanej.

    • Odwołanie do kolumna nie pobiera dane z wielu wierszy.Na przykład funkcji agregujących, takich jak wartość zagregowana lub średnia zależy od danych z wielu wierszy i spowodowałoby computed_column_expression rodzaju.

    • Nie ma dostępu do danych systemu lub dostępu do danych użytkownika.

  • Kolumna obliczana, zawierającej typowe wyrażenie runtime (CLR) języka musi być deterministyczny i oznaczony jako PERSISTED kolumny mogą być indeksowane.CLR wyrażeń typ zdefiniowany przez użytkownika są dozwolone w kolumna obliczana definicje.Obliczane kolumny, której typ jest CLR typ zdefiniowany przez użytkownika mogą być indeksowane, jak typ jest porównywalna.Aby uzyskać więcej informacji, zobacz CLR typów zdefiniowanych przez użytkownika.

Ostrzeżenie

Gdy odwołujesz się do typu danych Data ciąg literały w indeksowanych kolumny obliczane w SQL Server, firma Microsoft zaleca, aby jawnie przekonwertować literału na typ data przy użyciu stylu format data deterministyczny.Lista stylów formatowania data są przewidywalne, zobacz ODDANYCH i KONWERTOWAĆ.Niejawna konwersja ciągów znaków do typów danych data wyrażeniami są uważane za rodzaju, chyba że poziom zgodności bazy danych jest zestaw 80 lub starszym.Wynika to z wyniki zależą od języka i Format daty ustawienia sesja serwera.Na przykład wyniki wyrażenie CONVERT (datetime, '30 listopad 1996', 113) zależą od ustawienia języka, ponieważ ciąg "30 listopad 1996' oznacza miesiącami w różnych językach.Podobnie, w wyrażenie DATEADD(mm,3,'2000-12-01'), Aparat baz danych interpretuje ciąg '2000-12-01' oparte na ustawienie format daty.

Niejawna konwersja nie obsługujących kodu Unicode znaku danych między sortowania jest traktowana jako rodzaju, chyba że poziom zgodności jest zestaw 80 lub starszym.

Gdy ustawienie poziom zgodności bazy danych jest 90, nie można utworzyć indeksy obliczanej kolumny zawierające te wyrażenia.Powstawać są jednak istniejącej kolumny obliczane, zawierających te wyrażenia z uaktualnioną bazą danych.Jeśli używasz obliczanych kolumn indeksowanych zawierające ciąg niejawna do konwersji data, aby uniknąć uszkodzenia możliwe indeksu upewnij się, że zgodnych ustawień JĘZYKOWYCH i format data w baz danych i aplikacji.

Wymogi staranności

computed_column_expression Musi być dokładna.A computed_column_expression jest dokładne, gdy jeden lub więcej z następujących czynności:

  • Wyrażenie nie jest float lub real typów danych.

  • Nie używaj float lub real Typ danych w definicji.Na przykład w następującej instrukcja kolumna y jest int i przewidywalne, ale nie precyzyjne.

    CREATE TABLE t2 (a int, b int, c int, x float, 
       y AS CASE x 
             WHEN 0 THEN a 
             WHEN 1 THEN b 
             ELSE c 
          END)
    

Ostrzeżenie

Dowolny float lub real wyrażenie jest uważana za niedokładny i nie może być klucz indeksu; float lub real wyrażenie mogą być używane w indeksowany widok , ale nie jako klucz.Dotyczy to również dla kolumny obliczanej.Wszelkie funkcję, wyrażenie lub funkcja zdefiniowana przez użytkownika jest uważany za niedokładny, jeśli zawiera ona żadnych float lub real wyrażeń.Obejmuje to te logiczne (porównań).

IsPrecise właściwość COLUMNPROPERTY funkcja raportów czy computed_column_expression jest dokładny.

Wymagania dotyczące typu danych

  • computed_column_expression Dla kolumna obliczana nie może być text, ntext, lub image typów danych.

  • kolumna obliczanapochodne s image, ntext, text, varchar(max), nvarchar(max), varbinary(max), i xml typy danych mogą być indeksowane tak długo, jak kolumna obliczana typ danych jest dopuszczalne jako indeks klucz kolumna.

  • kolumna obliczanapochodne s image, ntext, i text typów danych może być (włączone) kolumnami indeks nieklastrowany tak długo, jak kolumna obliczana typ danych jest dopuszczalne jako kolumna indeksu nonkey.

Ustawianie opcji wymagania

  • Opcja poziom połączeń ANSI_NULLS musi być zestaw on po wykonaniu instrukcja CREATE TABLE lub ALTER TABLE definiuje kolumna obliczanej.OBJECTPROPERTY funkcja raportów, czy opcja jest przez IsAnsiNullsOn właściwość.

  • Połączenia, na którym tworzony jest indeks i wszystkie próby instrukcji INSERT, UPDATE lub DELETE, które spowoduje zmianę wartości w indeksie, musi mieć sześć zestaw opcji ustawiona na ON i jedną opcję Wył.Optymalizator ignoruje indeksu na kolumna obliczana dla każdej instrukcja SELECT, wykonywane przez połączenie, które nie mają te same ustawienia opcji.

    • Opcja NUMERIC_ROUNDABORT musi być zestaw do OFF, i muszą być następujące opcje zestaw on:

    • ANSI_NULLS

    • SPOWODOWAŁYBY

    • ANSI_WARNINGS

    • ARITHABORT

    • CONCAT_NULL_YIELDS_NULL

    • QUOTED_IDENTIFIER

    zestaw ANSI_WARNINGS ON niejawnie ustawia ARITHABORT on, gdy poziom zgodności bazy danych jest ustawiony na 90.Jeśli poziom zgodności bazy danych jest zestaw 80 lub wcześniej, opcja ARITHABORT musi być jawnie zestaw on.Aby uzyskać więcej informacji, zobacz Ustaw opcje, które wpływają na wyniki.

Tworzenie indeksów utrwalonej kolumny obliczanej

Można utworzyć indeks dla kolumna obliczana zdefiniowanego za pomocą wyrażenie deterministyczny, ale niedokładny, jeśli kolumna jest oznaczona jako PERSISTED w instrukcja CREATE TABLE lub ALTER TABLE.Oznacza to, że Aparat baz danych przechowuje obliczonych wartości w tabela i aktualizuje je przy innych kolumn, na którym kolumna obliczana zależy od są aktualizowane. Aparat baz danych Używa tych wartości trwałe tworzy indeks na podstawie kolumna i odwołuje się do indeksu w kwerendzie.Ta opcja umożliwia utworzenie indeksu na kolumna obliczana po Aparat baz danych nie może udowodnić z dokładnością, czy funkcja, która zwraca kolumna obliczana wyrażeń, szczególnie funkcji CLR utworzonego w .NET Framework, przewidywalne i precyzyjne.