Indexen maken met opgenomen kolommen
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
In dit artikel wordt beschreven hoe u opgenomen (of niet-sleutel)kolommen toevoegt om de functionaliteit van niet-geclusterde indexen in SQL Server uit te breiden met behulp van SQL Server Management Studio of Transact-SQL. Door niet-sleutelkolommen op te tellen, kunt u niet-geclusterde indexen maken die meer query's behandelen. Dit komt doordat de niet-sleutelkolommen de volgende voordelen hebben:
- Ze kunnen gegevenstypen zijn die niet zijn toegestaan als indexsleutelkolommen.
- Ze worden niet meegenomen door de database-engine bij het berekenen van het aantal indexsleutelkolommen of de grootte van de indexsleutel.
Een index met niet-sleutelkolommen kan de queryprestaties aanzienlijk verbeteren wanneer alle kolommen in de query worden opgenomen in de index als sleutelkolommen of niet-sleutelkolommen. Prestatieverbeteringen worden bereikt omdat de queryoptimalisatie alle kolomwaarden in de index kan vinden; tabel- of geclusterde indexgegevens worden niet geopend, wat resulteert in minder I/O-bewerkingen van de schijf.
Notitie
Wanneer een index alle kolommen bevat waarnaar wordt verwezen door een query, wordt deze meestal aangeduid als die betrekking hebben op de query.
Aanbevelingen voor ontwerpen
Ontwerp niet-geclusterde indexen met een grote indexsleutelgrootte zo dat alleen kolommen die worden gebruikt voor zoeken en opzoeken, sleutelkolommen zijn. Maak van alle andere kolommen die de query behandelen niet-sleutel kolommen. Op deze manier beschikt u over alle kolommen die nodig zijn om de query te behandelen, maar de indexsleutel zelf is klein en efficiënt.
Neem niet-sleutelkolommen op in een niet-geclusterde index om te voorkomen dat de huidige indexgroottelimieten van maximaal 32 sleutelkolommen en een maximale indexsleutelgrootte van 1700 bytes (16 sleutelkolommen en 900 bytes vóór SQL Server 2016 (13.x)) overschrijden. De database-engine beschouwt geen niet-sleutelkolommen bij het berekenen van het aantal indexsleutelkolommen of de grootte van de indexsleutel.
De volgorde van niet-sleutelkolommen in de indexdefinitie heeft geen invloed op de prestaties van query's die gebruikmaken van de index.
Vermijd zeer brede niet-geclusterde indexen waarbij de opgenomen kolommen geen beperkte subset van de onderliggende tabelkolommen vertegenwoordigen. Als u brede indexen toevoegt, controleert u altijd of de kosten voor het bijwerken van één extra brede index de kosten voor het rechtstreeks lezen van de tabel compenseren.
Beperkingen en beperkingen
Niet-sleutelkolommen kunnen alleen worden gedefinieerd voor niet-geclusterde indexen.
Alle gegevenstypen, met uitzondering van tekst, en afbeelding kunnen worden gebruikt als niet-sleutelkolommen.
Berekende kolommen die deterministisch zijn en nauwkeurig of onnauwkeurig, kunnen niet-sleutelkolommen zijn. Zie Indexen voor berekende kolommenvoor meer informatie.
Berekende kolommen die zijn afgeleid van afbeelding, ntexten tekst gegevenstypen kunnen niet-sleutelkolommen zijn, zolang het berekende kolomgegevenstype is toegestaan als een niet-sleutelindexkolom.
Niet-sleutelkolommen kunnen niet uit een tabel worden verwijderd, tenzij de index van die tabel eerst wordt verwijderd.
Niet-sleutelkolommen kunnen niet worden gewijzigd, behalve om het volgende te doen:
Wijzig de nullbaarheid van de kolom van NOT NULL naar NULL.
Verhoog de lengte van varchar, nvarcharof varbinaire kolommen.
Veiligheid
Machtigingen
Vereist ALTER-machtigingen voor de tabel of weergave. De gebruiker moet lid zijn van de sysadmin vaste serverfunctie of de db_ddladmin en db_owner vaste databaserollen.
SQL Server Management Studio gebruiken om een index te maken met niet-sleutelkolommen
Selecteer in Objectverkenner het plusteken om de database uit te vouwen die de tabel bevat waarop u een index wilt maken met niet-sleutelkolommen.
Selecteer het plusteken om de map Tabellen uit te vouwen.
Selecteer het plusteken om de tabel uit te vouwen waarop u een index wilt maken met niet-sleutelkolommen.
Klik met de rechtermuisknop op de map Indexen, wijs Nieuwe indexaan en selecteer niet-geclusterde index....
Voer in het dialoogvenster Nieuwe index op de pagina Algemeen de naam van de nieuwe index in het vak Indexnaam.
Op het tabblad Index-sleutelkolommen selecteer Toevoegen....
In het dialoogvenster Kolommen selecteren intable_name, selecteer het selectievakje of de selectievakjes van de tabelkolommen die aan de index moeten worden toegevoegd.
Selecteer OK-.
Selecteer op het tabblad Opgenomen kolommen de optie Toevoegen....
Schakel in het dialoogvenster Kolommen selecteren intable_name het selectievakje of selectievakjes in van de tabelkolom of -kolommen die als niet-sleutelkolommen aan de index moeten worden toegevoegd.
Selecteer OK-.
In het dialoogvenster Nieuwe index selecteer je OK.
Een index met niet-sleutelkolommen maken met Transact-SQL
Maak in Objectverkennerverbinding met een exemplaar van de Database Engine.
Selecteer op de standaardbalk de optie Nieuwe query.
Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer uitvoeren.
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