Udostępnij za pomocą


Włączanie indeksów i ograniczeń

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

W tym artykule opisano sposób włączania indeksu wyłączonego w programie SQL Server przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL. Po wyłączeniu indeksu pozostaje w stanie wyłączonym, dopóki nie zostanie przebudowany lub usunięty.

Limitations

Po odbudowaniu indeksu wszystkie ograniczenia, które zostały wyłączone z powodu wyłączenia indeksu, muszą być włączone ręcznie. PRIMARY KEY ograniczenia i UNIQUE są włączone przez ponowne skompilowanie skojarzonego indeksu. Ta indeks musi być przebudowany (włączony) zanim można będzie włączyć ograniczenia FOREIGN KEY, które odwołują się do ograniczenia PRIMARY KEY lub UNIQUE. FOREIGN KEY Ograniczenia są włączone przy użyciu instrukcji ALTER TABLE CHECK CONSTRAINT .

Nie można ponownie skompilować wyłączonego indeksu klastrowanego, gdy opcja jest ustawiona ONLINE na ON.

Gdy indeks klastrowany jest wyłączony lub włączony, a indeks nieklastrowany jest wyłączony, akcja indeksu klastrowanego zawiera następujące wyniki dla wyłączonego indeksu nieklastrowanego.

Akcja indeksu klastrowanego Wyłączony stan indeksu nieklastrowanego
ALTER INDEX REBUILD Pozostaje wyłączona
ALTER INDEX ALL REBUILD Przebudowane i włączone
DROP INDEX Przebudowane i włączone
CREATE INDEX WITH DROP_EXISTING Pozostaje wyłączona

Utworzenie nowego klastrowanego indeksu działa tak samo jak ALTER INDEX ALL REBUILD.

Dozwolone akcje dla indeksów nieklastrowanych skojarzonych z indeksem klastrowanym zależą od stanu, zarówno wyłączonego, jak i włączonego, obu typów indeksów. Poniższa tabela zawiera podsumowanie dozwolonych akcji dla indeksów nieklastrowanych.

Akcja indeksu nieklastrowanego Gdy indeksy klastrowane i nieklastrowane są wyłączone Gdy indeks klastrowany jest włączony i indeks nieklastrowany jest w obu stanach
ALTER INDEX REBUILD Akcja kończy się niepowodzeniem Akcja zakończy się powodzeniem
DROP INDEX Akcja zakończy się powodzeniem Akcja zakończy się powodzeniem
CREATE INDEX WITH DROP_EXISTING Akcja kończy się niepowodzeniem Akcja zakończy się powodzeniem

Podczas odbudowywania wyłączonych skompresowanych indeksów nieklastrowanych, wartość domyślna data_compression zmienia się na none, co oznacza, że indeksy są nieskompresowane. Jest to spowodowane utratą metadanych ustawień kompresji, gdy indeksy nieklastrowane są wyłączone. Aby obejść ten problem, należy określić jawną kompresję danych w instrukcji rebuild.

Permissions

Wymagane jest uprawnienie ALTER do tabeli lub widoku. W przypadku korzystania z programu DBCC DBREINDEXmusisz być właścicielem tabeli lub być członkiem stałej roli serwera sysadmin albo członkiem db_ddladmin lub db_owner stałych ról bazy danych.

Korzystanie z programu SQL Server Management Studio

Włącz wyłączony indeks

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

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

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

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

  5. Kliknij prawym przyciskiem myszy indeks, który chcesz włączyć, i wybierz polecenie Skompiluj ponownie.

  6. W oknie dialogowym Ponowne kompilowanie indeksów sprawdź, czy prawidłowy indeks znajduje się w indeksach , aby ponownie skompilować siatkę i wybierz pozycję OK.

Włą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 włączyć indeksy.

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

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

  4. Kliknij prawym przyciskiem myszy folder Indexes i wybierz polecenie Rebuild All.

  5. W oknie dialogowym Ponowne kompilowanie indeksów sprawdź, czy prawidłowe indeksy znajdują się w tabeli Indeksy do ponownego kompilowania, a następnie wybierz OK. Aby usunąć indeks z indeksów w celu odbudowy siatki, wybierz indeks, a następnie naciśnij klawisz Delete.

Następujące informacje są dostępne w oknie dialogowym Ponowne kompilowanie indeksów:

Korzystanie z Transact-SQL

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

Włączanie indeksu wyłączonego przy użyciu funkcji ALTER INDEX

Uruchom następujący skrypt Transact-SQL. Ten przykład aktywuje indeks na tabeli.

USE AdventureWorks2022;
GO

ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee REBUILD;
GO

Włączanie indeksu wyłączonego przy użyciu polecenia CREATE INDEX

Uruchom następujący skrypt Transact-SQL. W tym przykładzie ponownie tworzony jest indeks IX_Employee_OrganizationLevel_OrganizationNode na tabeli HumanResources.Employee, korzystając z kolumn OrganizationLevel i OrganizationNode, a następnie usuwany jest istniejący indeks IX_Employee_OrganizationLevel_OrganizationNode.

USE AdventureWorks2022;
GO

CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee(OrganizationLevel, OrganizationNode) WITH (DROP_EXISTING = ON);
GO

Włącz wyłączony indeks za pomocą DBCC DBREINDEX

Note

Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji.

Uruchom następujący skrypt Transact-SQL. Ten przykład aktywuje indeks na tabeli.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);
GO

Włączanie wszystkich indeksów w tabeli przy użyciu funkcji ALTER INDEX

Uruchom następujący skrypt Transact-SQL. Ten przykład umożliwia włączenie wszystkich indeksów w HumanResources.Employee tabeli.

USE AdventureWorks2022;
GO

ALTER INDEX ALL
ON HumanResources.Employee REBUILD;
GO

Włączanie wszystkich indeksów w tabeli przy użyciu polecenia DBCC DBREINDEX

Note

Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji.

Uruchom następujący skrypt Transact-SQL. Ten przykład umożliwia włączenie wszystkich indeksów w HumanResources.Employee tabeli.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", " ");
GO