Udostępnij za pośrednictwem


Wyłączanie indeksów i ograniczeń

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

W tym artykule opisano sposób wyłączania indeksu lub ograniczeń w programie SQL Server przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL. Wyłączenie indeksu uniemożliwia użytkownikowi dostęp do indeksu, a w przypadku indeksów klastrowanych także do danych tabeli bazowej. Definicja indeksu pozostaje w metadanych, a statystyki indeksu są przechowywane w indeksach nieklastrowanych. Wyłączenie klastrowanego indeksu w widoku lub indeksie nieklastrowanym fizycznie usuwa dane indeksu.

Wyłączenie indeksu klastrowanego w tabeli uniemożliwia dostęp do danych. Dane nadal pozostają w tabeli, ale są niedostępne dla operacji języka manipulowania danymi (DML), dopóki indeks nie zostanie usunięty lub ponownie utworzony.

Ograniczenia

Indeks nie jest utrzymywany, gdy jest wyłączony.

Optymalizator zapytań nie uwzględnia wyłączonego indeksu podczas tworzenia planów wykonywania zapytań. Ponadto zapytania odwołujące się do wyłączonego indeksu z wskazówką tabeli kończą się niepowodzeniem.

Nie można utworzyć indeksu, który używa tej samej nazwy co istniejący wyłączony indeks.

Wyłączony indeks można usunąć.

Wyłączenie indeksu unikatowego powoduje wyłączenie ograniczenia PRIMARY KEY lub UNIQUE oraz wszystkich ograniczeń FOREIGN KEY odwołujących się do indeksowanych kolumn z innych tabel. Wyłączenie indeksu klastrowanego powoduje również wyłączenie wszystkich ograniczeń przychodzących i wychodzących FOREIGN KEY w tabeli źródłowej. Nazwy ograniczeń są wyświetlane w komunikacie ostrzegawczym, gdy indeks jest wyłączony. Po odbudowaniu indeksu wszystkie ograniczenia muszą zostać ręcznie włączone przy użyciu instrukcji ALTER TABLE CHECK CONSTRAINT.

Indeksy nieklastrowane są automatycznie wyłączone, gdy skojarzony indeks klastrowany jest wyłączony. Nie można ich włączyć do momentu włączenia indeksu klastrowanego w tabeli lub widoku albo porzucania indeksu klastrowanego w tabeli. Indeksy nieklastrowane muszą być jawnie włączone, chyba że indeks klastrowany został włączony przy użyciu instrukcji ALTER INDEX ALL REBUILD.

Instrukcja ALTER INDEX ALL REBUILD odbudowuje i włącza wszystkie wyłączone indeksy w tabeli, z wyjątkiem wyłączonych indeksów na widokach. Indeksy widoków muszą być włączone w osobnej instrukcji ALTER INDEX ALL REBUILD.

Wyłączenie indeksu klastrowanego w tabeli powoduje również wyłączenie wszystkich indeksów klastrowanych i nieklastrowanych w widokach odwołujących się do tej tabeli. Te indeksy muszą zostać odbudowane tak samo jak te indeksy w tabeli referencyjnej.

Nie można uzyskać dostępu do wierszy danych wyłączonego indeksu klastrowanego, z wyjątkiem upuszczania lub ponownego przebudowywania indeksu klastrowanego.

Można ponownie skompilować wyłączony indeks nieklastrowany w trybie online, gdy tabela nie ma wyłączonego indeksu klastrowanego. Należy jednak zawsze ponownie skompilować wyłączony indeks klastrowany w trybie offline, jeśli używasz instrukcji ALTER INDEX REBUILD lub CREATE INDEX WITH DROP_EXISTING. Aby uzyskać więcej informacji na temat operacji indeksowania online, zobacz Wykonywanie operacji indeksowania w trybie online.

Nie można pomyślnie wykonać instrukcji CREATE STATISTICS w tabeli z wyłączonym indeksem klastrowanym.

Opcja AUTO_CREATE_STATISTICS bazy danych tworzy nowe statystyki dla kolumny, gdy indeks jest wyłączony, a istnieją następujące warunki:

  • AUTO_CREATE_STATISTICS jest ustawiona na wartość ON.
  • Brak istniejących statystyk dla kolumny.
  • Statystyki są wymagane podczas optymalizacji zapytań.

Jeśli indeks klastrowany jest wyłączony, DBCC CHECKDB nie może zwrócić informacji o tabeli bazowej; Zamiast tego instrukcja zgłasza, że indeks klastrowany jest wyłączony. DBCC INDEXDEFRAG nie można użyć do defragmentacji indeksu wyłączonego; instrukcja kończy się niepowodzeniem z komunikatem o błędzie. Można użyć DBCC DBREINDEX, aby ponownie skompilować wyłączony indeks.

Utworzenie nowego klastrowanego indeksu umożliwia wcześniej wyłączone indeksy nieklastrowane. Aby uzyskać więcej informacji, zobacz Włącz indeksy i ograniczenia.

Jeśli tabela jest stertą, wszystkie indeksy nieklastrowane zostaną ponownie skompilowane.

Uprawnienia

Aby wykonać ALTER INDEX, wymagane jest co najmniej uprawnienie ALTER do tabeli lub widoku.

Korzystanie z programu SQL Server Management Studio

Wyłączanie indeksu

  1. W Eksploratorze obiektów wybierz znak plus, aby rozwinąć bazę danych zawierającą tabelę, na której chcesz wyłączyć indeks.

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

  3. Wybierz znak plus, aby rozwinąć tabelę, w której chcesz wyłączyć indeks.

  4. Wybierz znak plus, aby rozwinąć folder indeksów.

  5. Kliknij prawym przyciskiem myszy indeks, który chcesz wyłączyć, a następnie wybierz pozycję Wyłącz.

    Notatka

    Jeśli tabela jest otwarta w trybie Projektowania, kontrolka Wyłącz nie jest dostępna. Aby kontynuować, zamknij projektanta tabel i zacznij od nowa.

  6. W oknie dialogowym wyłączanie indeksów sprawdź, czy prawidłowy indeks znajduje się w indeksach , aby wyłączyć siatkę, a następnie wybierz pozycję OK.

Wyłączanie wszystkich indeksów w tabeli

  1. W Eksploratorze obiektów wybierz znak plus, aby rozwinąć bazę danych zawierającą tabelę, na której chcesz wyłączyć indeksy.

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

  3. Wybierz znak plus, aby rozwinąć tabelę, w której chcesz wyłączyć indeksy.

  4. Kliknij prawym przyciskiem myszy folder Indeksy, a następnie wybierz pozycję Wyłącz wszystkie.

  5. W oknie dialogowym Wyłącz indeksy sprawdź, czy prawidłowe indeksy znajdują się w indeksach , aby wyłączyć siatkę, a następnie wybierz pozycję OK. Aby usunąć indeks z indeksów w celu wyłączenia siatki, wybierz indeks, a następnie naciśnij Usuń.

Następujące informacje są dostępne w oknie dialogowym Wyłącz indeksy:

  • nazwa indeksu

    Wyświetla nazwę indeksu. Podczas wykonywania ta kolumna wyświetla również ikonę reprezentującą stan.

  • nazwa tabeli

    Wyświetla nazwę tabeli lub widoku, dla którego utworzono indeks.

  • typu indeksu

    Wyświetla typ indeksu: Klastrowane, nieklastrowane, Spatiallub XML .

  • status

    Wyświetla stan operacji wyłączania. Możliwe wartości po wykonaniu to:

    • Pusty

      Przed wykonaniem stan jest pusty.

    • W toku

      Wyłączenie indeksów zostało uruchomione, ale nie zostało ukończone.

    • sukces

      Operacja wyłączania została ukończona pomyślnie.

    • Błąd

      Wystąpił błąd podczas operacji wyłączania indeksu, a operacja nie została ukończona pomyślnie.

    • zatrzymane

      Wyłączenie indeksu nie zostało ukończone pomyślnie, ponieważ użytkownik zatrzymał operację.

  • Komunikat

    Zawiera tekst komunikatów o błędach podczas operacji wyłączania. Podczas wykonywania błędy są wyświetlane jako hiperlinki. Tekst hiperlinków opisuje treść błędu. Kolumna Message jest rzadko wystarczająco szeroka, aby odczytać pełny tekst wiadomości. Istnieją dwa sposoby uzyskania pełnego tekstu:

    • Przenieś wskaźnik myszy na komórkę wiadomości, aby wyświetlić etykietkę narzędzia z tekstem błędu.
    • Wybierz link, aby wyświetlić okno dialogowe z pełnym opisem błędu.

Korzystanie z Transact-SQL

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2022 lub AdventureWorksDW2022, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

Wyłączanie indeksu

  1. W Eksploratorze Obiektów nawiąż połączenie z wystąpieniem silnika baz danych.

  2. Na pasku Standardowa wybierz pozycję Nowe zapytanie.

  3. Skopiuj poniższy przykład i wklej go w oknie zapytania, a następnie wybierz pozycję Wykonaj. Ten przykład kodu wyłącza indeks IX_Employee_OrganizationLevel_OrganizationNode w tabeli HumanResources.Employee.

    USE AdventureWorks2022;
    GO
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode
        ON HumanResources.Employee
    DISABLE;
    

Wyłączanie wszystkich indeksów w tabeli

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

  2. Na pasku Standardowym wybierz pozycję Nowe zapytanie.

  3. Skopiuj poniższy przykład i wklej go w oknie zapytania, a następnie wybierz pozycję Wykonaj. Ten przykład wyłącza wszystkie indeksy w tabeli HumanResources.Employee.

    USE AdventureWorks2022;
    GO
    
    ALTER INDEX ALL ON HumanResources.Employee
    DISABLE;