- 02/11/2019
- 4 minutter å lese
-
- M
- M
- C
- M
- r
-
+9
Gjelder: SQL Server (alle støttede versjoner) Azure SQL Database
En indeks er en diskstruktur som er knyttet til en tabell eller visning som gir raskere henting av rader fra tabellen eller visningen. En indeks inneholder nøkler bygget fra en eller flere kolonner i tabellen eller visningen. Disse nøklene er lagret i en struktur (B-tree) som gjør det mulig for SQL Server å finne raden eller radene som er knyttet til nøkkelverdiene raskt og effektivt.
En tabell eller visning kan inneholde følgende typer indekser:
-
Klynget
- Klyngede indekser sorterer og lagrer dataradene i tabellen eller visningen basert på nøkkelverdiene. Dette er kolonnene som er inkludert i indeksdefinisjonen. Det kan bare være en gruppert indeks per tabell, fordi selve dataradene kan lagres i bare én rekkefølge.
- Den eneste gangen dataradene i en tabell lagres i sortert rekkefølge, er når tabellen inneholder en gruppert indeks. Når en tabell har en klynget indeks, kalles tabellen en klyngetabell. Hvis en tabell ikke har noen gruppert indeks, lagres dataradene i en ikke-ordnet struktur kalt heap.
-
Ikke-gruppert
-
Ikke-grupperte indekser har en struktur skilt fra dataradene. En ikke-klassifisert indeks inneholder de ikke-grupperte indeksnøkkelverdiene, og hver nøkkelverdioppføring har en peker til dataraden som inneholder nøkkelverdien.
-
Pekeren fra en indeksrad i en ikke-gruppert indeks til en datarad kalles en radlokator. Strukturen til radlokatoren avhenger av om datasidene er lagret i en haug eller en gruppert tabell. For en haug er en radlokator en peker til raden. For en klyngetabell er radlokatoren den klyngede indeksnøkkelen.
-
Du kan legge til kolonner uten nøkkel til bladnivået i den ikke-klarte indeksen for å omgå eksisterende indeksnøkkelgrenser, og utføre spørsmål som er fullt dekket, indeksert. For mer informasjon, se Opprett indekser med inkluderte kolonner. For mer informasjon om indeksnøkkelgrenser, se Maksimum kapasitetsspesifikasjoner for SQL Server.
-
Både klyngede og ikke-grupperte indekser kan være unike. Dette betyr at ikke to rader kan ha samme verdi for indeksnøkkelen. Ellers er indeksen ikke unik, og flere rader kan dele den samme nøkkelverdien. For mer informasjon, se Opprett unike indekser.
Indekser vedlikeholdes automatisk for en tabell eller visning når tabelldataene endres.
Se indekser for flere typer spesialindekser.
Indekser og begrensninger
Indekser opprettes automatisk når PRIMÆRE NØKKEL- og UNIKE begrensninger er definert i tabellkolonner. For eksempel når du oppretter en tabell med UNIQUE-begrensning, oppretter Database Engine automatisk en ikke-gruppert indeks. Hvis du konfigurerer en PRIMÆR NØKKEL, oppretter Database Engine automatisk en klynget indeks, med mindre det allerede finnes en klynget indeks. Når du prøver å håndheve en PRIMÆR Nøkkelbegrensning på en eksisterende tabell og det allerede eksisterer en gruppert indeks på den tabellen, tvinger SQL Server den primære nøkkelen ved hjelp av en ikke-sammenlagt indeks.
For mer informasjon, se Opprette primære nøkler og Lag unike begrensninger.
Hvordan indekser brukes av Query Optimizer
Godt utformede indekser kan redusere disk I / O-operasjoner og forbruke færre systemressurser, og forbedrer dermed spørringsytelsen. Indekser kan være nyttige for en rekke spørsmål som inneholder setninger SELECT, UPDATE, DELETE eller MERGE. Vurder spørringen SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250
i AdventureWorks2012-databasen. Når dette spørsmålet kjøres, evaluerer spørringsoptimalisereren hver tilgjengelige metode for å hente dataene og velger den mest effektive metoden. Metoden kan være en tabellskanning eller skanne en eller flere indekser hvis de finnes.
Når du utfører en tabellskanning, leser spørringsoptimalisereren alle radene i tabellen, og trekker ut radene som møter kriteriene for spørringen. En tabellskanning genererer mange disk I / O-operasjoner og kan være ressurskrevende. En tabellskanning kan imidlertid være den mest effektive metoden hvis for eksempel resultatsettet til spørringen er en høy prosentandel av rader fra tabellen.
Når spørreoptimalisereren bruker en indeks, søker den i indekserer nøkkelkolonner, finner lagringsplassen til radene som trengs av spørringen, og trekker ut de samsvarende radene fra stedet. Generelt er det å søke i indeksen mye raskere enn å søke i tabellen, i motsetning til en tabell inneholder en indeks ofte svært få kolonner per rad, og radene er i sortert rekkefølge.
Søkeoptimereren velger vanligvis den mest effektive metoden når du utfører spørsmål. Hvis ingen indekser er tilgjengelige, må spørringsoptimalisereren imidlertid bruke en tabellskanning. Din oppgave er å designe og lage indekser som passer best for ditt miljø, slik at spørringsoptimalisereren har et utvalg av effektive indekser å velge fra. SQL Server tilbyr Database Engine Tuning Advisor for å hjelpe deg med analysen av databasemiljøet ditt og i valg av passende indekser.
Viktig
For mer informasjon om retningslinjer for indeksdesign og internt, se SQL Server Index Design Guide.
- SQL Server Index Design Guide
- Create Clustered Indexes
- Create Nonclustered Indekser