sql >> Database >  >> RDS >> Sqlserver

Index Sleutel Kolom VS Index Inbegrepen Kolom

Indexsleutelkolommen maken deel uit van de b-tree van de index. Inbegrepen kolommen zijn dat niet.

Neem twee indexen:

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

index1 is beter geschikt voor dit soort zoekopdrachten:

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

Terwijl index2 is beter geschikt voor dit soort zoekopdrachten:

SELECT col2, col3 FROM table1 WHERE col1 = x

In de eerste zoekopdracht, index1 biedt een mechanisme voor het snel identificeren van de rijen van belang. De zoekopdracht wordt (waarschijnlijk) uitgevoerd als een indexzoekopdracht, gevolgd door een bladwijzerzoekopdracht om de volledige rij(en) op te halen.

In de tweede zoekopdracht, index2 fungeert als dekkende index. SQL Server hoeft de basistabel helemaal niet te raken, omdat de index alle gegevens biedt die nodig zijn om aan de query te voldoen. index1 zou in dit geval ook als dekkingsindex kunnen fungeren.

Als u een dekkende index wilt, maar niet alle kolommen aan de b-tree wilt toevoegen omdat u er niet naar zoekt, of niet kunt omdat ze geen toegestaan ​​datatype zijn (bijv. XML), gebruik dan de INCLUDE-clausule.



  1. pijplijnfunctie met cursorparameter oracle

  2. Hoeveel RAM gebruikt SQL Server eigenlijk?

  3. java.sql.SQLException:ORA-01843:geen geldige maandfout

  4. Opmerkingen insluiten in MySQL-instructies