Sdílet prostřednictvím


Vytvoření clusterovaného indexu

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

Clusterované indexy můžete vytvářet v tabulkách pomocí aplikace SQL Server Management Studio nebo jazyka Transact-SQL. S několika výjimkami by každá tabulka měla mít clusterovaný index. Kromě zlepšení výkonu dotazů lze clusterovaný index znovu vytvořit nebo změnit uspořádání na vyžádání za účelem řízení fragmentace tabulky. Clusterovaný index lze také vytvořit v zobrazení. (Clusterované indexy jsou definovány v článku clusterované a neclusterované indexy.)

Typické implementace

Clusterované indexy se implementují následujícími způsoby:

  • omezení primárního klíče a jedinečného klíče

    Při vytváření omezení PRIMARY KEY se automaticky vytvoří jedinečný skupinový index ve sloupci nebo sloupcích, pokud clusterovaný index v tabulce ještě neexistuje a nezadáte jedinečný neclusterovaný index. Sloupec primárního klíče nesmí obsahovat hodnoty NULL.

    Když vytvoříte omezení UNIQUE, vytvoří se jedinečný neclusterovaný index, který ve výchozím nastavení vynucuje omezení UNIQUE. Jedinečný clusterovaný index můžete zadat, pokud clusterovaný index v tabulce ještě neexistuje.

    Index vytvořený jako součást omezení se automaticky přidělí stejnému názvu jako název omezení. Další informace naleznete v tématu Omezení primárního a cizího klíče a Jedinečná omezení a kontrolní omezení.

  • Index nezávislý na omezení

    Pokud bylo zadáno omezení neclusterovaného primárního klíče, můžete vytvořit clusterovaný index u sloupce jiného než primárního klíče.

Omezení

  • Při vytvoření clusterované struktury indexu se v příslušných souborech a skupinách souborů vyžaduje místo na disku pro staré (zdrojové) i nové (cílové) struktury. Transakce není potvrzena, dokud se nedokončí uvolnění staré struktury. Může se také vyžadovat další dočasné místo na disku pro řazení. Další informace najdete v tématu Požadavky na diskový prostor pro operace DDL s indexem.

  • Pokud je clusterovaný index vytvořen na haldě s několika existujícími neclusterovanými indexy, je nutné znovu vytvořit všechny neclusterované indexy tak, aby obsahovaly hodnotu klíče clusteringu místo identifikátoru řádku (RID). Podobně platí, že pokud je clusterovaný index vyřazen do tabulky, která obsahuje několik neclusterovaných indexů, všechny neclusterované indexy se znovu sestaví jako součást operace DROP. Tento proces může u velkých tabulek trvat výrazně dlouho.

    Upřednostňovaným způsobem vytváření indexů u velkých tabulek je začít s clusterovaným indexem a pak sestavit všechny neclusterované indexy. Při vytváření indexů u existujících tabulek zvažte nastavení možnosti ONLINE na ZAPNUTO. Pokud je nastavená hodnota ZAPNUTO, dlouhodobé zámky tabulek se neudržují. To umožňuje pokračovat v dotazech nebo aktualizacích podkladové tabulky. Další informace naleznete v tématu Provádění operací indexu online.

  • Klíč indexu seskupeného indexu nemůže obsahovat varchar sloupce, které mají aktuální data v ROW_OVERFLOW_DATA alokační jednotce. Pokud je clusterovaný index vytvořen ve sloupci varchar a existující data jsou v jednotce přidělení IN_ROW_DATA, následné vložení nebo aktualizace akcí ve sloupci, které by nasdílely data mimo řádek, selžou. Pokud chcete získat informace o tabulkách, které můžou obsahovat data přetečení řádků, použijte sys.dm_db_index_physical_stats (Transact-SQL) funkci dynamické správy.

Dovolení

Vyžaduje oprávnění ALTER pro tabulku nebo zobrazení. Uživatel musí být členem pevné role serveru správce systému nebo členem pevných databázových rolí db_ddladmin a db_owner.

Použití aplikace SQL Server Management Studio

Vytvoření clusterovaného indexu z Průzkumníka objektů

  1. V Průzkumníku objektů rozbalte tabulku, na které chcete vytvořit clusterovaný index.

  2. Klikněte pravým tlačítkem na složku Indexy, přejděte na Nový indexa vyberte Clustered Index....

  3. V dialogovém okně Nový index zadejte na stránce Obecné název nového indexu do pole Název indexu.

  4. V sekci Sloupce klíče indexuvyberte Přidat....

  5. V dialogovém okně Vybrat sloupce ztable_name zaškrtněte políčko sloupce tabulky, který se má přidat do clusterovaného indexu.

  6. Vyberte OK.

  7. V dialogovém okně Nový index vyberte OK.

Vytvoření clusterovaného indexu pomocí Návrháře tabulek

  1. V Průzkumníku objektů rozbalte databázi, na které chcete vytvořit tabulku s clusterovaným indexem.

  2. Klikněte pravým tlačítkem na složku Tabulky a vyberte Nová tabulka....

  3. Vytvořte novou tabulku jako obvykle. Další informace najdete v tématu Vytvoření tabulek (databázový stroj).

  4. Klikněte pravým tlačítkem myši na novou tabulku vytvořenou dříve a vyberte Návrh.

  5. V nabídce Návrhář tabulky vyberte Indexy/Klíče.

  6. V dialogovém okně Indexy/klíče vyberte Přidat.

  7. Vyberte nový index v textovém poli Vybraný primární/jedinečný klíč nebo index.

  8. V mřížce vyberte Vytvořit jako shlukovanýa v rozevíracím seznamu napravo od vlastnosti zvolte Ano.

  9. Vyberte Zavřít.

  10. V nabídce Soubor vyberte možnost Uložittable_name.

Použij Transact-SQL

  1. V Průzkumník objektůse připojte k instanci databázového serveru.

  2. Na panelu Standard vyberte Nový dotaz.

  3. Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit.

    USE AdventureWorks2022;
    GO
    
    -- Create a new table with three columns.
    CREATE TABLE dbo.TestTable (
        TestCol1 INT NOT NULL,
        TestCol2 NCHAR(10) NULL,
        TestCol3 NVARCHAR(50) NULL
    );
    GO
    
    -- Create a clustered index called IX_TestTable_TestCol1
    -- on the dbo.TestTable table using the TestCol1 column.
    CREATE CLUSTERED INDEX IX_TestTable_TestCol1 ON dbo.TestTable (TestCol1);
    GO
    

Další informace naleznete v tématu CREATE INDEX (Transact-SQL).