Skapa index med inkluderade kolumner
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Den här artikeln beskriver hur du lägger till inkluderade (eller icke-nyckel) kolumner för att utöka funktionerna för icke-grupperade index i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL. Genom att inkludera icke-nyckelkolumner kan du skapa icke-klustrade index som täcker fler sökfrågor. Det beror på att icke-nyckelkolumnerna har följande fördelar:
- De kan vara datatyper som inte tillåts som indexnyckelkolumner.
- De beaktas inte av databasmotorn vid beräkning av antalet indexnyckelkolumner eller indexnyckelstorlek.
Ett index med icke-nyckelkolumner kan avsevärt förbättra frågeprestanda när alla kolumner i frågan ingår i indexet, antingen som nyckelkolumner eller icke-nyckelkolumner. Prestandavinster uppnås eftersom frågeoptimeraren kan hitta alla kolumnvärden i indexet. tabell- eller klustrade indexdata används inte, vilket resulterar i färre disk-I/O-åtgärder.
Obs
När ett index innehåller alla kolumner som refereras av en fråga kallas det vanligtvis som täcker frågan.
Designrekommendationer
Designa om icke-grupperade index som har en stor indexnyckelstorlek så att endast kolumner som används för sökning och sökningar är nyckelkolumner. Gör alla andra kolumner som täcker frågan till icke-nyckelkolumner. På så sätt har du alla kolumner som behövs för att täcka frågan, men själva indexnyckeln är liten och effektiv.
Inkludera icke-nyckelkolumner i ett icke-grupperat index för att undvika att överskrida de aktuella indexstorleksbegränsningarna för högst 32 nyckelkolumner och en maximal indexnyckelstorlek på 1 700 byte (16 nyckelkolumner och 900 byte före SQL Server 2016 (13.x)). Databasmotorn tar inte hänsyn till icke-nyckelkolumner vid beräkning av antalet indexnyckelkolumner eller indexnyckelstorlek.
Ordningen på icke-nyckelkolumner i indexdefinitionen påverkar inte prestandan för frågor som använder indexet.
Undvik mycket breda icke-grupperade index där de inkluderade kolumnerna inte representerar en tillräckligt smal delmängd av de underliggande tabellkolumnerna. Om du lägger till breda index kontrollerar du alltid om kostnaden för att uppdatera ett extra brett index förskjuter kostnaden för att läsa direkt från tabellen.
Begränsningar och restriktioner
Icke-nyckelkolumner kan bara definieras för icke-grupperade index.
Alla datatyper utom text, ntextoch bild kan användas som icke-nyckelkolumner.
Beräknade kolumner som är deterministiska och antingen exakta eller oprecisa kan vara icke-nyckelkolumner. Mer information finns i Index över beräknade kolumner.
Beräknade kolumner som härleds från bild, ntextoch text datatyper kan vara icke-nyckelkolumner så länge den beräknade kolumndatatypen tillåts som en icke-nyckelindexkolumn.
Icke-nyckelkolumner kan inte tas bort från en tabell om inte tabellens index tas bort först.
Icke-nyckelkolumner kan inte ändras, förutom att göra följande:
Ändra nullbarheten för kolumnen från NOT NULL till NULL.
Öka längden på kolumnerna varchar, nvarchareller varbinary.
Säkerhet
Behörigheter
Kräver ALTER-behörighet på 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 för att skapa ett index med icke-nyckelkolumner
I Object Explorer väljer du plustecknet för att expandera databasen som innehåller tabellen där du vill skapa ett index med icke-nyckelkolumner.
Välj plustecknet för att expandera mappen Tables.
Välj plustecknet för att expandera tabellen där du vill skapa ett index med icke-nyckelkolumner.
Högerklicka på mappen Index, peka på Nytt indexoch välj icke-klustrat index....
I dialogrutan Nytt index på sidan Allmänt anger du namnet på det nya indexet i rutan Indexnamn.
Under fliken indexnyckelkolumner väljer du Lägg till....
I dialogrutan Välj kolumner fråntable_name markerar du kryssrutan eller kryssrutorna i tabellkolumnen eller kolumnerna som ska läggas till i indexet.
Välj OK.
Under fliken Inkluderade kolumner väljer du Lägg till....
I dialogrutan Välj kolumner fråntable_name markerar du kryssrutan eller kryssrutorna i tabellkolumnen eller kolumnerna som ska läggas till i indexet som icke-nyckelkolumner.
Välj OK.
I dialogrutan Nytt index väljer du OK.
Använda Transact-SQL för att skapa ett index med icke-nyckelkolumner
I Object Exploreransluter du till en instans av databasmotorn.
I standardfältet väljer du Ny fråga.
Kopiera och klistra in följande exempel i frågefönstret och välj Kör.
USE AdventureWorks2022; GO -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns. -- index key column is PostalCode and the nonkey columns are -- AddressLine1, AddressLine2, City, and StateProvinceID. CREATE NONCLUSTERED INDEX IX_Address_PostalCode ON Person.Address (PostalCode) INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID); GO