Wyłączanie indeksów i ograniczeń
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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
W Eksploratorze obiektów wybierz znak plus, aby rozwinąć bazę danych zawierającą tabelę, na której chcesz wyłączyć indeks.
Wybierz znak plus, aby rozwinąć folder Tables.
Wybierz znak plus, aby rozwinąć tabelę, w której chcesz wyłączyć indeks.
Wybierz znak plus, aby rozwinąć folder indeksów.
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.
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
W Eksploratorze obiektów wybierz znak plus, aby rozwinąć bazę danych zawierającą tabelę, na której chcesz wyłączyć indeksy.
Wybierz znak plus, aby rozwinąć folder Tables.
Wybierz znak plus, aby rozwinąć tabelę, w której chcesz wyłączyć indeksy.
Kliknij prawym przyciskiem myszy folder Indeksy, a następnie wybierz pozycję Wyłącz wszystkie.
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
W Eksploratorze Obiektów nawiąż połączenie z wystąpieniem silnika baz danych.
Na pasku Standardowa wybierz pozycję Nowe zapytanie.
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 tabeliHumanResources.Employee
.USE AdventureWorks2022; GO ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee DISABLE;
Wyłączanie wszystkich indeksów w tabeli
W Eksploratorze obiektów , nawiąż połączenie z wystąpieniem silnika bazy danych.
Na pasku Standardowym wybierz pozycję Nowe zapytanie.
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;