Sdílet prostřednictvím


Vytváření neclusterovaných indexů

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

V SQL Serveru můžete vytvářet neclusterované indexy pomocí aplikace SQL Server Management Studio nebo jazyka Transact-SQL. Neclusterovaný index je struktura indexu oddělená od dat uložených v tabulce, která změní pořadí jednoho nebo více vybraných sloupců. Neclusterované indexy vám často pomůžou rychleji najít data než vyhledávání v podkladové tabulce; Dotazy mohou být někdy zcela zodpovězeny daty v neclusterovém indexu nebo neclusterovaný index může odkazovat databázový stroj na řádky v podkladové tabulce. Obecně platí, že neclusterované indexy se vytvářejí za účelem zlepšení výkonu často používaných dotazů, které nejsou pokryty clusterovaným indexem, nebo k vyhledání řádků v tabulce bez clusterovaného indexu (označovaného jako halda). V tabulce nebo indexovém zobrazení můžete vytvořit více neclusterovaných indexů.

Než začnete

Typické implementace

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

  • omezení UNIQUE

    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. Další informace najdete v tématu Jedinečná omezení a kontrolní omezení.

  • Index nezávislý na omezení

    Ve výchozím nastavení se vytvoří neclusterovaný index, pokud není zadaný cluster. Maximální počet neclusterovaných indexů, které lze vytvořit pro každou tabulku, je 999. To zahrnuje všechny indexy vytvořené omezením PRIMÁRNÍ KLÍČ nebo JEDINEČNÉ, ale nezahrnuje indexy XML.

  • neklastrový index na indexovaném zobrazení

    Po vytvoření jedinečného clusterovaného indexu v zobrazení je možné vytvořit neclusterované indexy. Další informace najdete v tématu Vytvoření indexovaných zobrazení.

Bezpečnost

Dovolení

Vyžaduje oprávnění ALTER v tabulce nebo zobrazení. Uživatel musí být členem pevné serverové role sysadmin nebo pevné databázové role db_ddladmin a db_owner.

Použití aplikace SQL Server Management Studio

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

  1. V Průzkumníku objektů rozbalte databázi obsahující tabulku, na které chcete vytvořit neclusterovaný index.

  2. Rozbalte složku Tabulky.

  3. Pravým tlačítkem myši klikněte na tabulku, na které chcete vytvořit neclusterovaný index, a vyberte Návrh.

  4. Klikněte pravým tlačítkem myši na sloupec, u kterého chcete vytvořit neklastrovaný index, a vyberte Indexy/Klíče.

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

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

  7. V mřížce vyberte Vytvořit jako seskupenýa z rozevíracího seznamu napravo od vlastnosti zvolte Ne.

  8. Vyberte Zavřít.

  9. V nabídce Soubor zvolte Uložittable_name.

Vytvoření neclusterovaného indexu pomocí Průzkumníka objektů

  1. V Průzkumníku objektů rozbalte databázi obsahující tabulku, na které chcete vytvořit neclusterovaný index.

  2. Rozbalte složku Tabulky.

  3. Rozbalte tabulku, na které chcete vytvořit neclusterovaný index.

  4. Klikněte pravým tlačítkem na složku Indexy, přejděte na Nový indexa vyberte Neskupený index....

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

  6. V části Sloupce klíče indexuvyberte Přidat....

  7. V dialogovém okně Vybrat sloupce ztable_name zaškrtněte políčko nebo políčka sloupečků tabulky, které chcete přidat do neklastrovaného indexu.

  8. Vyberte OK.

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

Použití Transact-SQL

Vytvoření neclusterovaného indexu v tabulce pomocí Transact-SQL

  1. V Průzkumník objektůse připojte k instanci stroje Database Engine, na kterém je nainstalován AdventureWorks2022. AdventureWorks2022 si můžete stáhnout z ukázkových databází .

  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
    -- Find an existing index named IX_ProductVendor_VendorID and delete it if found.
    IF EXISTS (SELECT name FROM sys.indexes
                WHERE name = N'IX_ProductVendor_VendorID')
        DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor;
    GO
    -- Create a nonclustered index called IX_ProductVendor_VendorID
    -- on the Purchasing.ProductVendor table using the BusinessEntityID column.
    CREATE NONCLUSTERED INDEX IX_ProductVendor_VendorID
        ON Purchasing.ProductVendor (BusinessEntityID);
    GO