sql >> Database teknologi >  >> RDS >> Sqlserver

Indeksnøglekolonne VS Indeks Inkluderet kolonne

Indeksnøglekolonner er en del af indeksets b-træ. Inkluderede kolonner er ikke.

Tag to indekser:

CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)

index1 er bedre egnet til denne form for forespørgsel:

SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z

Hvorimod index2 er bedre egnet til denne form for forespørgsel:

SELECT col2, col3 FROM table1 WHERE col1 = x

I den første forespørgsel, index1 giver en mekanisme til hurtigt at identificere rækkerne af interesse. Forespørgslen vil (sandsynligvis) udføres som en indekssøgning efterfulgt af et bogmærkeopslag for at hente hele rækken/rækkerne.

I den anden forespørgsel, index2 fungerer som et dækkende indeks. SQL Server behøver slet ikke at ramme basistabellen, da indekset giver alle de data, det skal bruge for at tilfredsstille forespørgslen. index1 kunne også fungere som et dækkende indeks i dette tilfælde.

Hvis du ønsker et dækkende indeks, men ikke ønsker at tilføje alle kolonner til b-træet, fordi du ikke søger på dem, eller ikke kan, fordi de ikke er en tilladt datatype (f.eks. XML), skal du bruge INKLUDERE klausul.



  1. Hvordan LOWER() virker i MariaDB

  2. Oracle sqlTræk mellem to datoer

  3. Hvad blokerer Vælg top 1 * fra Tabelnavn med (nolock) fra at returnere et resultat?

  4. Hæv erklæring