Sdílet prostřednictvím


Povolení indexů a omezení

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL Database v Microsoft Fabric

Tento článek popisuje, jak povolit zakázaný index v SQL Serveru pomocí aplikace SQL Server Management Studio nebo jazyka Transact-SQL. Po zakázání indexu zůstane v zakázaném stavu, dokud se znovu nevytvoří nebo nebude odstraněn.

Omezení

Po opětovném sestavení indexu je třeba ručně povolit všechna omezení, která byla zakázána v důsledku deaktivace indexu. PRIMARY KEY a UNIQUE omezení jsou povolena opětovným sestavením přidruženého indexu. Tento index musí být znovu sestaven a povolen, než bude možné povolit FOREIGN KEY omezení, která odkazují na PRIMARY KEY omezení nebo UNIQUE omezení. FOREIGN KEY Omezení jsou povolena pomocí ALTER TABLE CHECK CONSTRAINT příkazu.

Nelze opětovně sestavit deaktivovaný clusterovaný index, pokud je možnost ONLINE nastavena na hodnotu ON.

Pokud je clusterovaný index zakázaný nebo povolený a neclusterovaný index je zakázaný, akce clusterovaného indexu má následující výsledky u zakázaného neclusterovaného indexu.

Akce clusterovaného indexu Zakázání stavu neclusterovaného indexu
ALTER INDEX REBUILD Zůstává vypnutý.
ALTER INDEX ALL REBUILD Přestavěno a aktivováno
DROP INDEX Přepracováno a aktivováno
CREATE INDEX WITH DROP_EXISTING Zůstává vypnutý.

Vytvoření nového clusterovaného indexu se chová stejně jako ALTER INDEX ALL REBUILD.

Povolené akce u neclusterovaných indexů přidružených ke clusterovanému indexu závisí na stavu, jestli jsou zakázané nebo povolené, u obou typů indexů. Následující tabulka shrnuje povolené akce u neclusterovaných indexů.

Akce neclusterovaného indexu Pokud jsou clusterované i neclusterované indexy zakázané Pokud je clusterovaný index povolený a neclusterovaný index je v některém ze stavů
ALTER INDEX REBUILD Akce selhává. Akce bude úspěšná.
DROP INDEX Akce bude úspěšná. Akce bude úspěšná.
CREATE INDEX WITH DROP_EXISTING Akce selže. Akce bude úspěšná.

Při opětovném sestavení zakázaných komprimovaných neclusterovaných indexů se none výchozí hodnota změní na data_compression, což znamená, že indexy jsou nekomprimované. Důvodem je ztráta metadat nastavení komprese při zakázání neclusterovaných indexů. Chcete-li tento problém vyřešit, je nutné zadat explicitní kompresi dat v příkazu rebuild.

Dovolení

Vyžaduje oprávnění ALTER pro tabulku nebo zobrazení. Pokud používáte DBCC DBREINDEX, musíte buď vlastnit tabulku, nebo být členem pevné role serveru správce systému , nebo členem db_ddladmin nebo db_owner pevné databázové role.

Použití aplikace SQL Server Management Studio

Povolení zakázaného indexu

  1. V Průzkumníku objektů vyberte znaménko plus a rozbalte databázi obsahující tabulku, na které chcete povolit index.

  2. Klikněte na znaménko plus a rozbalte složku Tabulky.

  3. Výběrem znaménka plus rozbalte tabulku, na které chcete povolit index.

  4. Kliknutím na znaménko plus rozbalte složku Indexy.

  5. Klikněte pravým tlačítkem myši na index, který chcete aktivovat, a vyberte Znovu sestavit.

  6. V dialogovém okně Znovu sestavit indexy ověřte, zda je správný index v mřížce Indexy ke znovu sestavení a klikněte na OK.

Povolení všech indexů v tabulce

  1. V Průzkumníku objektů vyberte znaménko plus a rozbalte databázi obsahující tabulku, na které chcete indexy povolit.

  2. Klikněte na znaménko plus a rozbalte složku Tabulky.

  3. Výběrem znaménka plus rozbalte tabulku, u které chcete povolit indexy.

  4. Klikněte pravým tlačítkem na složku Indexy a vyberte Znovu sestavit vše.

  5. V dialogovém okně Znovu sestavit indexy ověřte, zda jsou správné indexy v indexech k opětovnému sestavení mřížky , a vyberte OK. Pokud chcete odebrat index z Indexy pro opětovné sestavení mřížky, vyberte index a stiskněte klávesu Delete.

Následující informace jsou k dispozici v dialogovém okně Znovu sestavit indexy:

Použijte Transact-SQL

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2022 nebo AdventureWorksDW2022, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .

Povolte zakázaný index pomocí ALTER INDEX

Spusťte následující Transact-SQL skript. Tento příklad povolí IX_Employee_OrganizationLevel_OrganizationNode index v HumanResources.Employee tabulce.

USE AdventureWorks2022;
GO

ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee REBUILD;
GO

Povolení zakázaného indexu pomocí funkce CREATE INDEX

Spusťte následující Transact-SQL skript. Tento příklad znovu vytvoří index IX_Employee_OrganizationLevel_OrganizationNode na tabulce HumanResources.Employee pomocí sloupců OrganizationLevel a OrganizationNode, a potom odstraní existující index IX_Employee_OrganizationLevel_OrganizationNode.

USE AdventureWorks2022;
GO

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

Povolení zakázaného indexu pomocí DBCC DBREINDEX

Poznámka:

Tato funkce bude odebrána v budoucí verzi SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají.

Spusťte následující Transact-SQL skript. Tento příklad aktivuje IX_Employee_OrganizationLevel_OrganizationNode index u tabulky HumanResources.Employee.

USE AdventureWorks2022;
GO

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

Povolte všechny indexy na tabulce pomocí ALTER INDEX

Spusťte následující Transact-SQL skript. Tento příklad povolí všechny indexy v HumanResources.Employee tabulce.

USE AdventureWorks2022;
GO

ALTER INDEX ALL
ON HumanResources.Employee REBUILD;
GO

Aktivovat všechny indexy v tabulce pomocí DBCC DBREINDEX

Poznámka:

Tato funkce bude odebrána v budoucí verzi SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají.

Spusťte následující Transact-SQL skript. Tento příklad povolí všechny indexy v HumanResources.Employee tabulce.

USE AdventureWorks2022;
GO

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