Klyngede og ikke-grupperede indekser beskrevet

  • 02/11/2019
  • 4 minutter at læse
    • M
    • M
    • C
    • M
    • r
    • +9

Gælder for: SQL Server (alle understøttede versioner) Azure SQL Database

Et indeks er en diskstruktur, der er knyttet til en tabel eller visning, der fremskynder hentning af rækker fra tabellen eller visningen. Et indeks indeholder nøgler bygget fra en eller flere kolonner i tabellen eller visningen. Disse nøgler er gemt i en struktur (B-tree), der gør det muligt for SQL Server at finde den eller de række, der er knyttet til nøgleværdierne hurtigt og effektivt.

En tabel eller en oversigt kan indeholde følgende typer indekser:

  • Klyngede

    • Klyngede indeks sorterer og gemmer datarækkerne i tabellen eller visningen ud fra deres nøgleværdier. Dette er de kolonner, der er inkluderet i indeksdefinitionen. Der kan kun være et grupperet indeks pr. Tabel, fordi selve datarækkerne kun kan gemmes i en rækkefølge.
    • Den eneste gang datarækkerne i en tabel er gemt i sorteret rækkefølge, er, når tabellen indeholder et grupperet indeks. Når en tabel har et klyngedeks, kaldes tabellen en klyngetabel. Hvis en tabel ikke har et grupperet indeks, gemmes dens datarækker i en ikke-ordnet struktur kaldet en bunke.
  • Ikke-grupperet

    • Ikke-grupperede indekser har en struktur, der er adskilt fra datarækkerne. Et ikkeklusteret indeks indeholder de ikke-klyngede indeksnøgleværdier, og hver nøgleværdipost har en markør til datarækken, der indeholder nøgleværdien.

    • Markøren fra en indeksrække i en ikke-klatret indeks til en datarække kaldes en rækkefinder. Rækkelokatorens struktur afhænger af, om datasiderne er gemt i en bunke eller en klyngetabel. For en bunke er en rækkefinder en markør til rækken. For en klyngetabel er ræklokatoren den klyngede indeksnøgle.

    • Du kan tilføje kolonner uden nøgle til bladniveauet i det ikke-grupperede indeks for at omgå eksisterende indeksnøglegrænser, og udføre fuldt dækkede, indekserede forespørgsler. Se Opret indekser med inkluderede kolonner for at få flere oplysninger. For detaljer om indeksnøglegrænser, se Maksimum kapacitetsspecifikationer for SQL Server.

Både klyngede og ikke-grupperede indekser kan være unikke. Dette betyder, at ingen to rækker kan have den samme værdi for indeksnøglen. Ellers er indekset ikke unikt, og flere rækker kan dele den samme nøgleværdi. For mere information, se Opret unikke indekser.

Indeks opretholdes automatisk for en tabel eller visning, hver gang tabeldataene ændres.

Se Indekser for yderligere typer specialindekser.

Indekser og begrænsninger

Indekser oprettes automatisk, når PRIMÆRE NØGLE- og UNIKE begrænsninger defineres i tabelkolonner. For eksempel, når du opretter en tabel med en UNIQUE-begrænsning, opretter Database Engine automatisk et ikke-grupperet indeks. Hvis du konfigurerer en PRIMÆR KEY, opretter Database Engine automatisk et klynget indeks, medmindre der allerede findes et klynget indeks. Når du forsøger at håndhæve en PRIMÆR KEY-begrænsning på en eksisterende tabel, og der allerede findes et grupperet indeks på denne tabel, tvinger SQL Server den primære nøgle ved hjælp af et ikke-grupperet indeks.

Se Opret primære nøgler for at få flere oplysninger og Opret unikke begrænsninger.

Hvordan indekser bruges af forespørgselsoptimering

Veludformede indekser kan reducere disk I / O-operationer og forbruge færre systemressourcer, hvilket forbedrer forespørgselsydeevnen. Indekser kan være nyttige til en række forespørgsler, der indeholder SELECT-, UPDATE-, SLET- eller MERGE-sætninger. Overvej forespørgslen SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250 i AdventureWorks2012-databasen. Når denne forespørgsel udføres, evaluerer forespørgselsoptimeringsværktøjet hver tilgængelig metode til at hente dataene og vælger den mest effektive metode. Metoden kan være en skabelonscanning eller kan scanne et eller flere indekser, hvis de findes.

Når du udfører en skolescanning, læser forespørgselsoptimeringsværktøjet alle rækkerne i tabellen og udtrækker de rækker, der mødes forespørgslens kriterier. En tabellscanning genererer mange disk I / O-operationer og kan være ressourceintensiv. En tabellscanning kan dog være den mest effektive metode, hvis forespørgselsresultatsættet f.eks. Er en høj procentdel af rækker fra tabellen.

Når forespørgselsoptimeringsværktøjet bruger et indeks, søger det i indekserer nøglekolonner, finder lagerplaceringen for de rækker, der er nødvendige af forespørgslen, og udtrækker de matchende rækker fra den placering. Generelt er søgning i indekset meget hurtigere end at søge i tabellen, for i modsætning til en tabel indeholder et indeks ofte meget få kolonner pr. Række, og række er i sorteret rækkefølge.

Forespørgselsoptimeringsværktøjet vælger typisk den mest effektive metode ved udførelse af forespørgsler. Hvis der imidlertid ikke er nogen indekser tilgængelige, skal forespørgselsoptimeringsværktøjet bruge en tabel-scanning. Din opgave er at designe og oprette indekser, der passer bedst til dit miljø, så forespørgselsoptimeringsværktøjet har et udvalg af effektive indekser, du kan vælge fra. SQL Server leverer Database Engine Tuning Advisor til at hjælpe med analysen af dit databasemiljø og til valg af passende indekser.

Vigtigt

For mere information om retningslinjer for indeksdesign og interner henvises til SQL Server Index Design Guide.

  • SQL Server Index Design Guide
  • Opret klyngede indekser
  • Opret ikke-grupperet Indekser

Leave a Reply

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *