Dela via


Skapa ett unikt index

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Det här avsnittet beskriver hur du skapar ett unikt index i en tabell i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL. Ett unikt index garanterar att indexnyckeln inte innehåller några duplicerade värden och därför är varje rad i tabellen på något sätt unik. Det finns inga betydande skillnader mellan att skapa en UNIK begränsning och att skapa ett unikt index som är oberoende av en begränsning. Datavalidering sker på samma sätt och frågeoptimeraren skiljer inte mellan ett unikt index som skapats av en begränsning eller skapats manuellt. Att skapa en UNIK begränsning för kolumnen gör dock målet för indexet tydligt. Mer information om UNIQUE-begränsningar finns i UNIQUE-begränsningar och CHECK-begränsningar.

När du skapar ett unikt index kan du ange ett alternativ för att ignorera dubblettnycklar. Om det här alternativet är inställt på Ja och du försöker skapa dubblettnycklar genom att lägga till data som påverkar flera rader (med INSERT-instruktionen) läggs inte raden som innehåller en dubblett till. Om den är inställd på Nejmisslyckas hela infogningsåtgärden och alla data återställs.

Not

Du kan inte skapa ett unikt index för en enskild kolumn om den kolumnen innehåller NULL på mer än en rad. På samma sätt kan du inte skapa ett unikt index för flera kolumner om kombinationen av kolumner innehåller NULL på mer än en rad. Dessa behandlas som dubblettvärden i indexeringssyfte.

i det här avsnittet

Innan du börjar

Fördelar med ett unikt index

  • Multicolumn unika index garanterar att varje kombination av värden i indexnyckeln är unik. Om ett unikt index till exempel skapas på en kombination av LastName, FirstNameoch MiddleName kolumner, kan inga två rader i tabellen ha samma kombination av värden för dessa kolumner.

  • Förutsatt att data i varje kolumn är unika kan du skapa både ett unikt grupperat index och flera unika icke-grupperade index i samma tabell.

  • Unika index säkerställer dataintegriteten för de definierade kolumnerna.

  • Unika index ger ytterligare information som är användbar för frågeoptimeraren som kan skapa effektivare körningsplaner.

Typiska implementeringar

Unika index implementeras på följande sätt:

  • PRIMÄRNYCKEL eller UNIK-begränsning

    När du skapar en PRIMARY KEY-begränsning skapas automatiskt ett unikt klustrat index i kolumnen eller kolumnerna om ett grupperat index i tabellen inte redan finns och du inte anger ett unikt icke-grupperat index. Primärnyckelkolumnen kan inte tillåta NULL-värden.

    När du skapar en UNIK begränsning skapas ett unikt icke-grupperat index för att framtvinga en UNIK begränsning som standard. Du kan ange ett unikt grupperat index om det inte redan finns ett grupperat index i tabellen.

    Mer information finns i unika begränsningar och kontrollbegränsningar och primär- och främmande nyckelbegränsningar.

  • Index oberoende av en begränsning

    Flera unika icke-grupperade index kan definieras i en tabell.

    Mer information finns i CREATE INDEX (Transact-SQL).

  • Indexerad vy

    För att skapa en indexerad vy definieras ett unikt grupperat index på en eller flera vykolumner. Vyn körs och resultatuppsättningen lagras på lövnivån för indexet på samma sätt som tabelldata lagras i ett grupperat index. Mer information finns i Skapa indexerade vyer.

Begränsningar och inskränkningar

  • Det går inte att skapa ett unikt index, unik begränsning eller primärnyckelvillkor om det finns dubbletter av nyckelvärden i data.

  • Ett unikt icke-grupperat index kan innehålla icke-nyckelkolumner. Mer information finns i Skapa ett index med inkluderade kolumner.

Säkerhet

Behörigheter

Kräver ALTER-behörighet för tabellen eller vyn. Användaren måste vara medlem i sysadmin fast serverroll eller db_ddladmin och db_owner fasta databasroller.

Använda SQL Server Management Studio

Skapa ett unikt index med hjälp av tabelldesignern

  1. I Object Explorer expanderar du databasen som innehåller tabellen där du vill skapa ett unikt index.

  2. Expandera mappen Tables.

  3. Högerklicka på tabellen där du vill skapa ett unikt index och välj Design.

  4. På menyn Table Designer väljer du Index/Nycklar.

  5. I dialogrutan Index/nycklar klickar du på Lägg till.

  6. Välj det nya indexet i textrutan Vald primär/Unik nyckel eller Index.

  7. I huvudrutnätet under (Allmänt)väljer du Typ och väljer sedan Index i listan.

  8. Välj kolumneroch klicka sedan på ellipsen (...).

  9. I dialogrutan Indexkolumner under Kolumnnamnväljer du de kolumner som du vill indexera. Du kan välja upp till 16 kolumner. För optimala prestanda väljer du bara en eller två kolumner per index. För varje kolumn du väljer anger du om indexet ordnar värden för den här kolumnen i stigande eller fallande ordning.

  10. När alla kolumner för indexet är markerade klickar du på OK.

  11. I rutnätet under (Allmänt)väljer du Är unik och väljer sedan Ja i listan.

  12. Valfritt: I huvudrutnätet under Table Designerväljer du Ignorera duplicerade nycklar och väljer sedan Ja i listan. Gör detta om du vill ignorera försök att lägga till data som skulle skapa en dubblettnyckel i det unika indexet.

  13. Klicka på Stäng.

  14. På menyn Arkiv klickar du på Sparatable_name.

Skapa ett unikt index med hjälp av Object Explorer

  1. I Object Explorer expanderar du databasen som innehåller tabellen där du vill skapa ett unikt index.

  2. Expandera mappen Tables.

  3. Expandera tabellen där du vill skapa ett unikt index.

  4. Högerklicka på mappen Index, peka på Nytt indexoch välj icke-klustrat index....

  5. I dialogrutan Nytt index på sidan Allmänt anger du namnet på det nya indexet i rutan Indexnamn.

  6. Markera kryssrutan Unikt.

  7. Under indexnyckelkolumnerklickar du på Lägg till....

  8. I dialogrutan Välj kolumner fråntable_name markerar du kryssrutan eller kryssrutorna i tabellkolumnen eller kolumnerna som ska läggas till i det unika indexet.

  9. Klicka på OK.

  10. I dialogrutan Nytt index klickar du på OK.

Använda Transact-SQL

Skapa ett unikt index i en tabell

  1. I Object Exploreransluter du till en instans av databasmotorn.

  2. I fältet Standard klickar du på Ny fråga.

  3. Kopiera och klistra in följande exempel i frågefönstret och klicka på Kör.

    USE AdventureWorks2022;  
    GO  
    -- Find an existing index named AK_UnitMeasure_Name 
    -- on the Production.UnitMeasure table and delete it if found. 
    IF EXISTS (SELECT name from sys.indexes  
               WHERE name = N'AK_UnitMeasure_Name'
               AND object_id = OBJECT_ID(N'Production.UnitMeasure', N'U'))   
       DROP INDEX AK_UnitMeasure_Name ON Production.UnitMeasure;   
    GO  
    -- Create a unique index called AK_UnitMeasure_Name  
    -- on the Production.UnitMeasure table using the Name column.  
    CREATE UNIQUE INDEX AK_UnitMeasure_Name   
       ON Production.UnitMeasure (Name);   
    GO  
    

Mer information finns i CREATE INDEX (Transact-SQL).