Udostępnij za pośrednictwem


Tworzenie indeksów z dołączonymi kolumnami

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL Database w Microsoft Fabric

W tym artykule opisano sposób dodawania dołączonych (lub niekluczych) kolumn w celu rozszerzenia funkcjonalności indeksów nieklastrowanych w programie SQL Server przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL. Dołączając kolumny niekluczowe, można tworzyć indeksy nieklastrowane, które obejmują więcej zapytań. Dzieje się tak, ponieważ kolumny inne niż kluczowe mają następujące korzyści:

  • Mogą to być typy danych niedozwolone jako kolumny klucza indeksu.
  • Nie są one brane pod uwagę przez aparat bazy danych podczas obliczania liczby kolumn klucza indeksu lub rozmiaru klucza indeksu.

Indeks z kolumnami niekluczowymi może znacznie poprawić wydajność zapytań, gdy wszystkie kolumny w zapytaniu znajdują się w indeksie jako kolumny kluczowe lub niekluczowe. Wzrost wydajności jest osiągany, ponieważ optymalizator zapytań może zlokalizować wszystkie wartości kolumn w indeksie; Dostęp do danych tabeli lub indeksu klastrowanego nie jest uzyskiwany, co powoduje, że liczba operacji we/wy dysku jest mniejsza.

Notatka

Gdy indeks zawiera wszystkie kolumny, do których odwołuje się zapytanie, jest zwykle określane jako obejmujące zapytanie.

Zalecenia dotyczące projektowania

  • Przeprojektuj indeksy nieklastrowane, które mają duży rozmiar klucza indeksu, tak aby tylko kolumny używane do przeszukiwania i odwołań były kolumnami kluczowymi. Ustaw wszystkie inne kolumny, które obejmują zapytanie w kolumny inne niż kluczowe. W ten sposób będziesz mieć wszystkie kolumny potrzebne do pokrycia zapytania, ale sam klucz indeksu jest mały i wydajny.

  • Uwzględnij kolumny nieklastrowane w indeksie nieklastrowanym, aby uniknąć przekroczenia bieżących ograniczeń rozmiaru indeksu maksymalnie 32 kolumn kluczy i maksymalnego rozmiaru klucza indeksu wynoszącego 1700 bajtów (16 kolumn kluczy i 900 bajtów przed programem SQL Server 2016 (13.x)). Silnik bazy danych nie uwzględnia kolumn innych niż kluczowe podczas obliczania liczby kolumn klucza indeksu czy rozmiaru klucza indeksu.

  • Kolejność kolumn innych niżkey w definicji indeksu nie ma wpływu na wydajność zapytań korzystających z indeksu.

  • Unikaj bardzo szerokich indeksów nieklastrowanych, w których uwzględnione kolumny nie reprezentują wystarczająco wąskiego podzestawu kolumn tabeli bazowej. W przypadku dodawania szerokich indeksów należy zawsze sprawdzić, czy koszt aktualizacji jednego indeksu o dodatkowej szerokości równoważy koszt odczytu bezpośrednio z tabeli.

Ograniczenia i ograniczenia

  • Kolumny niekluczowe można definiować tylko dla indeksów nieklastrowanych.

  • Wszystkie typy danych z wyjątkiem tekstu, ntexti obrazu mogą być używane jako kolumny niekluczowe.

  • Obliczone kolumny, które są deterministyczne i precyzyjne lub nieprecyzyjne, mogą być kolumnami niekluczowymi. Aby uzyskać więcej informacji, zobacz Indeksy na obliczanych kolumnach.

  • Obliczone kolumny pochodzące z obrazu, ntexti tekst typów danych mogą być kolumnami niekluczowymi, o ile typ danych kolumny obliczeniowej jest dozwolony jako kolumna indeksu innego niż klucz.

  • Nie można usunąć kolumn nie będących kluczami z tabeli, chyba że w pierwszej kolejności zostanie usunięty indeks tej tabeli.

  • Nie można zmieniać kolumn nie będących kluczem, z wyjątkiem następujących czynności:

    • Zmień wartość null kolumny z NOT NULL na NULL.

    • Zwiększ długość kolumn varchar, nvarcharlub varbinary.

Bezpieczeństwo

Uprawnienia

Wymaga uprawnienia ALTER w tabeli lub widoku. Użytkownik musi być członkiem sysadmin stałej roli serwera lub db_ddladmin i db_owner stałych ról bazy danych.

Tworzenie indeksu z kolumnami niebędącymi kluczami przy użyciu programu SQL Server Management Studio

  1. W Eksploratorze obiektów wybierz znak plus, aby rozwinąć bazę danych zawierającą tabelę, w której chcesz utworzyć indeks z kolumnami niebędącymi kluczami.

  2. Wybierz znak plus, aby rozwinąć folder Tables.

  3. Wybierz znak plus, aby rozwinąć tabelę, w której chcesz utworzyć indeks z kolumnami niebędącymi kluczami.

  4. Kliknij prawym przyciskiem myszy folder Indeksy, wskaż Nowy indeksi wybierz Indeks nieklasterowany....

  5. W oknie dialogowym Nowy indeks, na stronie Ogólne, wprowadź nazwę nowego indeksu w polu nazwa indeksu.

  6. Na karcie Kolumny klucza indeksu wybierz pozycję Dodaj....

  7. W oknie dialogowym Wybierz kolumny ztable_name zaznacz pole wyboru lub pola wyboru kolumny lub kolumn tabeli, które mają zostać dodane do indeksu.

  8. Wybierz pozycję OK.

  9. Na karcie Dołączone kolumny wybierz pozycję Dodaj....

  10. W oknie dialogowym Wybierz kolumny ztable_name zaznacz pole wyboru lub pola wyboru tych kolumn tabeli, które mają zostać dodane do indeksu jako kolumny inne niż kluczowe.

  11. Wybierz pozycję OK.

  12. W oknie dialogowym Nowy indeks wybierz OK.

Tworzenie indeksu z kolumnami niekluczowymi przy użyciu Transact-SQL

  1. W Eksploratorze obiektównawiąż połączenie z wystąpieniem silnika bazy danych.

  2. Na pasku Standard wybierz pozycję Nowe zapytanie.

  3. Skopiuj poniższy przykład i wklej go w oknie zapytania, a następnie wybierz pozycję Wykonaj.

    USE AdventureWorks2022;
    GO
    -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns.
    -- index key column is PostalCode and the nonkey columns are
    -- AddressLine1, AddressLine2, City, and StateProvinceID.
    CREATE NONCLUSTERED INDEX IX_Address_PostalCode
    ON Person.Address (PostalCode)
    INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);
    GO