Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric Preview
Een index is een on-disk-structuur die is gekoppeld aan een tabel of weergave waarmee rijen uit de tabel of weergave sneller worden opgehaald. Een index bevat sleutels die zijn gebouwd op basis van een of meer kolommen in de tabel of weergave. Deze sleutels worden opgeslagen in een structuur (B-tree) waarmee SQL Server snel en efficiënt de rij of rijen kan vinden die zijn gekoppeld aan de sleutelwaarden.
Note
Documentatie maakt gebruik van de term B-tree in het algemeen in verwijzing naar indexen. In rowstore-indexen implementeert de Database Engine een B+ tree. Dit geldt niet voor columnstore-indexen of indexen voor tabellen die zijn geoptimaliseerd voor geheugen. Zie de SQL Server- en Azure SQL-indexarchitectuur en ontwerphandleidingvoor meer informatie.
Een tabel of weergave kan de volgende typen indexen bevatten:
Clustered
- Geclusterde indexen sorteren en opslaan de gegevensrijen in de tabel of weergave op basis van hun sleutelwaarden. Deze sleutelwaarden zijn de kolommen die zijn opgenomen in de indexdefinitie. Er kan slechts één geclusterde index per tabel zijn, omdat de gegevensrijen zelf in slechts één volgorde kunnen worden opgeslagen.
- De enige keer dat de gegevensrijen in een tabel worden opgeslagen in gesorteerde volgorde, is wanneer de tabel een geclusterde index bevat. Wanneer een tabel een geclusterde index heeft, wordt de tabel een geclusterde tabel genoemd. Als een tabel geen geclusterde index heeft, worden de bijbehorende gegevensrijen opgeslagen in een niet-geordende structuur, een heap genoemd.
Nonclustered
Niet-geclusterde indexen hebben een structuur die losstaat van de gegevensrijen. Een niet-geclusterde index bevat de niet-geclusterde indexsleutelwaarden en elke sleutelwaardevermelding heeft een aanwijzer naar de gegevensrij die de sleutelwaarde bevat.
De aanwijzer van een indexrij in een niet-geclusterde index naar een gegevensrij wordt een rijzoeker genoemd. De structuur van de rijzoeker hangt af van of de gegevenspagina's zijn opgeslagen in een heap of een geclusterde tabel. Voor een heap is een rijaanwijzer een aanwijzer naar de rij. Voor een geclusterde tabel is de rijzoeker de geclusterde indexsleutel.
U kunt niet-sleutelkolommen toevoegen aan het bladniveau van de niet-geclusterde index om bestaande indexsleutellimieten te omzeilen en volledig gedekte query's uit te voeren. Zie Indexen maken met opgenomen kolommen voor meer informatie. Zie Maximale capaciteitsspecificaties voor SQL Server voor meer informatie over indexsleutellimieten.
Zowel geclusterde als niet-geclusterde indexen kunnen uniek zijn. Met een unieke index kunnen geen twee rijen dezelfde waarde hebben voor de indexsleutel. Anders is de index niet uniek en kunnen meerdere rijen dezelfde sleutelwaarde delen. Zie Een unieke index maken voor meer informatie.
Indexen worden automatisch bijgehouden voor een tabel of weergave wanneer de tabelgegevens worden gewijzigd.
Zie Indexen voor meer typen indexen voor speciale doeleinden.
Indexen en beperkingen
SQL Server maakt automatisch indexen wanneer PRIMARY KEY en UNIQUE beperkingen worden gedefinieerd in tabelkolommen. Wanneer u bijvoorbeeld een tabel met een UNIQUE beperking maakt, maakt Database Engine automatisch een niet-geclusterde index. Als u een PRIMARY KEYdatabase-engine configureert, wordt automatisch een geclusterde index gemaakt, tenzij er al een geclusterde index bestaat. Wanneer u een PRIMARY KEY beperking voor een bestaande tabel probeert af te dwingen en er al een geclusterde index in die tabel bestaat, dwingt SQL Server de primaire sleutel af met behulp van een niet-geclusterde index.
Zie Primaire sleutels maken en Unieke beperkingen maken voor meer informatie.
Hoe indexen worden gebruikt door de queryoptimalisatie
Goed ontworpen indexen kunnen schijf-I/O-bewerkingen verminderen en minder systeemresources verbruiken. Daarom verbeteren deze indexen de queryprestaties. Indexen kunnen handig zijn voor verschillende query's die , UPDATEof DELETEMERGE instructies bevattenSELECT. Houd rekening met de query SELECT JobTitle, HireDate FROM HumanResources.Employee WHERE BusinessEntityID = 250 in de AdventureWorks2022 database. Wanneer deze query wordt uitgevoerd, evalueert de queryoptimalisatie elke beschikbare methode voor het ophalen van de gegevens en selecteert de meest efficiënte methode. De methode kan een tabelscan zijn of een of meer indexen scannen als deze bestaan.
Tijdens een tabelscan leest de queryoptimalisatie alle rijen in de tabel en extraheert de rijen die voldoen aan de criteria van de query. Een tabelscan genereert veel I/O-bewerkingen op schijf en kan resource-intensief zijn. Een tabelscan kan echter de meest efficiënte methode zijn als de resultatenset van de query bijvoorbeeld een hoog percentage rijen uit de tabel is.
Wanneer de queryoptimalisatie een index gebruikt, wordt in de kolommen met de indexsleutel gezocht, wordt de opslaglocatie gevonden van de rijen die nodig zijn voor de query en worden de overeenkomende rijen van die locatie geëxtraheerd. Over het algemeen is het doorzoeken van de index veel sneller dan het doorzoeken van de tabel. In tegenstelling tot een tabel bevat een index vaak zeer weinig kolommen per rij en staan de rijen in gesorteerde volgorde.
De queryoptimalisatie selecteert doorgaans de meest efficiënte methode bij het uitvoeren van query's. Als er echter geen indexen beschikbaar zijn, moet de queryoptimalisatie een tabelscan gebruiken. Uw taak is om indexen te ontwerpen en te maken die het meest geschikt zijn voor uw omgeving, zodat de queryoptimalisatie een selectie van efficiënte indexen heeft waaruit u kunt selecteren. SQL Server biedt de Database Engine Tuning Advisor om u te helpen bij de analyse van uw databaseomgeving en bij de selectie van de juiste indexen.
Important
Raadpleeg de SQL Server en Azure SQL architectuur en ontwerphandleiding voor indexen voor meer informatie over richtlijnen en de interne werking van indexen.