sql >> Databasteknik >  >> RDS >> Sqlserver

Index Key Column VS Index Inkluderad kolumn

Indexnyckelkolumner är en del av indexets b-träd. Inkluderade kolumner är inte.

Ta två index:

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

index1 är bättre lämpad för denna typ av fråga:

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

Medan index2 är bättre lämpad för denna typ av fråga:

SELECT col2, col3 FROM table1 WHERE col1 = x

I den första frågan, index1 tillhandahåller en mekanism för att snabbt identifiera raderna av intresse. Frågan kommer (förmodligen) att köras som en indexsökning, följt av en bokmärkessökning för att hämta hela raden/raderna.

I den andra frågan, index2 fungerar som ett täckande index. SQL Server behöver inte träffa bastabellen alls, eftersom indexet tillhandahåller all data den behöver för att tillfredsställa frågan. index1 skulle också kunna fungera som ett täckande index i detta fall.

Om du vill ha ett täckande index, men inte vill lägga till alla kolumner i b-trädet eftersom du inte söker på dem, eller inte kan eftersom de inte är en tillåten datatyp (t.ex. XML), använd INKLUDERA klausul.



  1. Rekursionsgränsen har överskridits i icke-rekursiv procedur

  2. Refererar till ett associativt matrisvärde från PDO::FETCH_ASSOC

  3. Installation av MySQL i Docker misslyckas med felmeddelande Kan inte ansluta till lokal MySQL-server via socket

  4. AWS MySQL RDS vs AWS DynamoDB