Maximum Size of Index Keys

When you design an index that contains many key columns, or large-size columns, calculate the size of the index key to make sure that you do not exceed the maximum index key size.SQL Server retains the 900-byte limit for the maximum total size of all index key columns.To nie obejmuje nonkey kolumny, które są uwzględnione w definicji ponownego zbudowania indeksów nie klastrowanych.

Obliczanie rozmiaru klucz indeksu

Aby obliczyć rozmiaru klucz indeksu, wykonaj następujące kroki.

  1. Wyświetlanie właściwości kolumn tabela, na którym będzie opierać indeksu.Można to zrobić za pomocą sys.Columns Służy do wyświetlania katalogu.

  2. Suma długości wszystkich kolumn, zdefiniowanego w indeksie klucz.

    Na przykład, następujące zagregowanych instrukcja max_length Kolumna sys.columns widok dla określonych kolumn w katalogu Person.Address Tabela.

    USE AdventureWorks;
    GO
    SELECT SUM(max_length)AS TotalIndexKeySize
    FROM sys.columns
    WHERE name IN (N'AddressLine1', N'AddressLine2', N'City', N'StateProvinceID', N'PostalCode')
    AND object_id = OBJECT_ID(N'Person.Address');
    

    Uwaga

    Jeśli kolumna tabela jest to typ danych Unicode, takie jak nchar lub nvarchar, długość kolumny wyświetlane jest długością przechowywania kolumny. Jest to dwa razy liczba znaków określonych w instrukcja.W poprzednim przykładzie City jest definiowana jako nvarchar(30) Typ danych; w związku z tym długości przechowywania kolumna jest 60.

  3. Jeśli długość sumy jest mniejsza niż 900 bajtów, w kolumnach może pełnić rolę kolumny kluczy indeksu.Jeśli całkowita długość przekracza 900 bajtów, należy zapoznać się z następującymi informacjami dla opcji i dodatkowe zagadnienia.

    Instrukcja CREATE INDEX używa następujące algorytmy do obliczania rozmiaru klucz indeksu:

    • Jeśli rozmiar wszystkich ustalone kolumny klucz i maksymalny rozmiar wszystkich kolumn klucz zmienna określona w instrukcja CREATE INDEX jest mniejsza niż 900 bajtów, instrukcja CREATE INDEX zakończy się pomyślnie bez ostrzeżenia lub komunikaty o błędach.

    • Jeśli kolumny klucz ustalony rozmiar wszystkich plus 900 przekracza maksymalny rozmiar wszystkich zmiennych kolumny klucz, ale rozmiar wszystkich stałych kolumn klucz plus minimalny rozmiar kolumny klucz zmiennej jest mniejsza niż 900, instrukcja CREATE INDEX powiedzie się z ostrzeżeniem, że kolejnych instrukcja INSERT lub UPDATE może zakończyć się niepowodzeniem, jeśli będzie ustawiona na wartości generuje klucz wartość większą niż 900 bajtów.Instrukcja CREATE INDEX kończy się niepowodzeniem, wówczas, gdy istniejące wiersze danych w tabela wartości, które generują klucz większą niż 900 bajtów.Kończy się niepowodzeniem, dalsze INSERT lub UPDATE stwierdzenie, że określa wartości danych generuje wartość klucz może przekraczać 900 bajtów.

    • Gdy rozmiar wszystkich kolumn klucz plus minimalny rozmiar wszystkich kolumn zmienna określona w instrukcja CREATE INDEX przekracza 900 bajtów, instrukcja CREATE INDEX nie powiedzie się.

    Poniższa tabela zawiera podsumowanie wyniki tworzenie indeksów, które spełnia lub przekracza maksymalny indeks ograniczenia rozmiaru klucz.

Minimalny rozmiar o zmiennej długości kolumna (s) + rozmiar ustalony danych kolumna (s)

Maksymalny rozmiar kolumn o zmiennej długości + rozmiar kolumn danych stała

MAX suma długości kolumna klucz indeksu dla istniejących wierszy *

Tworzony jest indeks

typ komunikatu

Błąd czas wykonywania INSERT lub UPDATE spowodowane zbyt duży indeks wartości klucz

> 900 bajty

Nie mające znaczenia

Nie mające znaczenia

Nie

Błąd

Brak indeksu obecnego wygenerować błąd.

<= 900 bajtów.

<= 900 bajtów.

Nie mające znaczenia

Tak

None

Nr.

<= 900 bajtów.

> 900 bajty

<= 900 bajtów.

Tak

Ostrzeżenie

Tylko wtedy, gdy sumie bieżącej długości wszystkich kolumn indeksu jest większa niż 900 bajtów.

<= 900 bajtów.

> 900 bajty

> 900 bajty

Nie

Błąd

Brak indeksu obecnego wygenerować błąd.

* Żaden z wierszy w tabela w czasie wykonania instrukcja CREATE INDEX można mieć indeks klucz wartości, których łączna długość przekraczać 900 bajtów.

Unikaj ograniczeń rozmiaru za pomocą zestawu kolumn

Można dołączyć kolumny nonkey nieklastrowany indeks w celu uniknięcia bieżących ograniczeń rozmiaru indeksu maksymalnie 16 kolumn klucz i rozmiar maksymalny indeks klucz 900 bajtów.The SQL Server Database Engine does not consider nonkey columns when calculating the number of index klucz columns or the total size of the index klucz columns. Indeks nieklastrowany z kolumnami dołączone całkowity rozmiar kolumny kluczy indeksu jest ograniczony do 900 bajtów.Całkowity rozmiar wszystkich kolumn nonkey jest ograniczona tylko przez rozmiar kolumn określonych w klauzula INCLUDE; na przykład varchar(max) kolumny są ograniczone do 2 GB. Kolumn w klauzula INCLUDE mogą być wszelkiego typu danych, z wyjątkiem text, ntext, a image.