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

Colonna chiave indice VS Colonna inclusa nell'indice

Le colonne della chiave dell'indice fanno parte dell'albero b dell'indice. Le colonne incluse non lo sono.

Prendi due indici:

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

index1 è più adatto per questo tipo di query:

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

Mentre index2 è più adatto per questo tipo di query:

SELECT col2, col3 FROM table1 WHERE col1 = x

Nella prima query, index1 fornisce un meccanismo per identificare rapidamente le righe di interesse. La query verrà (probabilmente) eseguita come ricerca di un indice, seguita da una ricerca di un segnalibro per recuperare le righe complete.

Nella seconda query, index2 funge da indice di copertura. SQL Server non deve assolutamente raggiungere la tabella di base, poiché l'indice fornisce tutti i dati necessari per soddisfare la query. index1 potrebbe anche fungere da indice di copertura in questo caso.

Se vuoi un indice di copertura, ma non vuoi aggiungere tutte le colonne all'albero b perché non le cerchi o non puoi perché non sono un tipo di dati consentito (ad esempio, XML), usa il INCLUDE clausola.