Zakázání indexů a omezení
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Database v Microsoft Fabric
Tento článek popisuje, jak zakázat index nebo omezení v SQL Serveru pomocí aplikace SQL Server Management Studio nebo Transact-SQL. Zakázáním indexu zabráníte přístupu uživatelů k indexu a pro clusterované indexy k podkladovým datům tabulky. Definice indexu zůstává v metadatech a statistiky indexu se uchovávají na neclusterovaných indexech. Zakázání clusterovaného indexu v zobrazení nebo neclusterovaného indexu fyzicky odstraní data indexu.
Zakázání clusterovaného indexu v tabulce brání přístupu k datům. Data stále zůstávají v tabulce, ale nejsou k dispozici pro operace jazyka DML (Data Manipulation Language), dokud není index odstraněn nebo znovu vytvořen.
Omezení
Index se neudržuje, když je vypnutý.
Optimalizátor dotazů při vytváření plánů provádění dotazů nebere v úvahu zakázaný index. Dotazy, které odkazují na zakázaný index s nápovědou tabulky, také selžou.
Index, který používá stejný název jako existující zakázaný index, nemůžete vytvořit.
Zakázaný index je možné vynechat.
Když zakážete jedinečný index, omezení PRIMARY KEY
nebo UNIQUE
a všechna omezení FOREIGN KEY
, která odkazují na indexované sloupce z jiných tabulek, jsou také zakázána. Když zakážete clusterovaný index, budou zakázána také všechna příchozí a odchozí FOREIGN KEY
omezení podkladové tabulky. Názvy omezení jsou uvedeny ve zprávě s upozorněním, když je index zakázán. Po opětovném sestavení indexu musí být všechna omezení povolena ručně pomocí příkazu ALTER TABLE CHECK CONSTRAINT
.
Neclusterované indexy jsou při zakázání přidruženého clusterovaného indexu automaticky zakázané. Není možné je povolit, dokud není povolený clusterovaný index tabulky nebo zobrazení nebo se clusterovaný index v tabulce zahodí. Neclusterované indexy musí být explicitně povolené, pokud nebyl clusterovaný index povolen pomocí příkazu ALTER INDEX ALL REBUILD
.
Příkaz ALTER INDEX ALL REBUILD
znovu sestaví a povolí všechny zakázané indexy v tabulce s výjimkou zakázaných indexů v zobrazeních. Indexy v zobrazeních musí být povoleny v samostatném příkazu ALTER INDEX ALL REBUILD
.
Zakázání clusterovaného indexu v tabulce také zakáže všechny clusterované a neclusterované indexy v zobrazeních, která odkazují na tuto tabulku. Tyto indexy musí být znovu sestaveny stejně jako indexy v odkazované tabulce.
K datovým řádkům zakázaného clusterovaného indexu nelze získat přístup s výjimkou vyřazení nebo opětovného sestavení clusterovaného indexu.
Zakázaný neclusterovaný index můžete znovu sestavit online, pokud tabulka nemá zakázaný clusterovaný index. Pokud však použijete příkaz ALTER INDEX REBUILD
nebo CREATE INDEX WITH DROP_EXISTING
, musíte vždy znovu sestavit zakázaný clusterovaný index offline. Další informace o online indexovacích operacích najdete v tématu Provádění operací indexu online.
Příkaz CREATE STATISTICS
nelze úspěšně spustit v tabulce se zakázaným clusterovaným indexem.
Možnost databáze AUTO_CREATE_STATISTICS
vytvoří pro sloupec nové statistiky, pokud je index zakázaný a existují následující podmínky:
-
AUTO_CREATE_STATISTICS
je nastavená naON
. - Pro sloupec neexistují žádné statistiky.
- Statistiky se vyžadují během optimalizace dotazů.
Pokud je clusterovaný index zakázaný, DBCC CHECKDB nemůže vrátit informace o podkladové tabulce; místo toho příkaz hlásí, že clusterovaný index je zakázaný. DBCC INDEXDEFRAG nelze použít k defragmentaci zakázaného indexu; příkaz selže s chybovou zprávou. K opětovnému sestavení zakázaného indexu můžete použít DBCC DBREINDEX.
Vytvoření nového clusterovaného indexu umožňuje dříve zakázané neclusterované indexy. Další informace najdete v tématu Povolení indexů a omezení.
Pokud je tabulka haldou, všechny neklastrované indexy se znovu sestaví.
Dovolení
K provedení ALTER INDEX
se vyžaduje minimálně oprávnění ALTER
v tabulce nebo zobrazení.
Použití aplikace SQL Server Management Studio
Zakázání indexu
V Průzkumníku objektů vyberte znaménko plus a rozbalte databázi obsahující tabulku, ve které chcete index zakázat.
Klikněte na znaménko plus a rozbalte složku Tabulky.
Výběrem znaménka plus rozbalte tabulku, na které chcete index zakázat.
Kliknutím na znaménko plus rozbalte složku Indexy.
Pravým tlačítkem myši klikněte na index, který chcete zakázat, a vyberte Zakázat.
Poznámka
Pokud je tabulka otevřená v režimu Návrh, ovládací prvek Zakázat není k dispozici. Pokud chcete pokračovat, zavřete návrháře tabulky a začněte znovu.
V dialogovém okně Zakázat indexy ověřte, zda je správný index v Indexy, chcete-li zakázat mřížku, a vyberte OK.
Zakázání všech indexů v tabulce
V Průzkumníku objektů vyberte znaménko plus a rozbalte databázi obsahující tabulku, na které chcete indexy zakázat.
Výběrem znaménka plus rozbalte složku Tabulky.
Výběrem znaménka plus rozbalte tabulku, u které chcete indexy zakázat.
Klikněte pravým tlačítkem na složku Indexy a vyberte Zakázat všechny.
V dialogovém okně Zakázat indexy ověřte, zda jsou správné indexy v Indexy, aby se zakázala mřížka, a vyberte OK. Pokud chcete odebrat index z Indexy, a tím deaktivovat mřížku, vyberte index a stiskněte klávesu Delete.
Následující informace jsou k dispozici v dialogovém okně Zakázat indexy:
Název indexu
Zobrazí název indexu. Během provádění zobrazí tento sloupec také ikonu představující stav.
název tabulky
Zobrazí název tabulky nebo zobrazení, pro které byl index vytvořen.
typ indexu
Zobrazí typ indexu: Clustered, Nonclustered, Spatialnebo XML.
Stav
Zobrazí stav operace zakázání. Možné hodnoty po provedení jsou:
Prázdný
Před spuštěním je stav prázdný.
Probíhá
Zakázání indexů se spustilo, ale není dokončené.
úspěch
Operace zakázání byla úspěšně dokončena.
Chyba
Během operace zakázání indexu došlo k chybě a operace se úspěšně nedokončila.
zastaveno
Zakázání indexu nebylo úspěšně dokončeno, protože uživatel operaci zastavil.
zprávy
Poskytuje text chybových zpráv během operace zakázání. Během provádění se chyby zobrazují jako hypertextové odkazy. Text hypertextových odkazů popisuje text chyby. Sloupec Zpráva je zřídka dostatečně široký, aby umožnil přečtení celého textu zprávy. Úplný text můžete získat dvěma způsoby:
- Umístěte ukazatel myši na buňku zprávy a zobrazí se nápověda s textem chyby.
- Výběrem hypertextového odkazu zobrazíte dialogové okno zobrazující úplnou chybu.
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 ukázky a komunitní projekty Microsoft SQL Serveru.
Zakázání indexu
V Průzkumník objektůse připojte k instanci databázového stroje.
Na panelu Standard vyberte Nový dotaz.
Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit. Tato ukázka zakáže index
IX_Employee_OrganizationLevel_OrganizationNode
v tabulceHumanResources.Employee
.USE AdventureWorks2022; GO ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee DISABLE;
Zakázání všech indexů v tabulce
V Průzkumníku objektůpřipojte se k instanci databázového stroje.
Na panelu Standard vyberte Nový dotaz.
Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit. Tato ukázka zakáže všechny indexy v tabulce
HumanResources.Employee
.USE AdventureWorks2022; GO ALTER INDEX ALL ON HumanResources.Employee DISABLE;