Nel primo viene aggiunto Column2
alla chiave dell'indice. Nella seconda non è possibile aggiungere (*) alla chiave, nel qual caso verrà visualizzata solo nelle pagine foglia indice. Ciò può consentire la ricerca dell'indice per Column1
ma evitare la necessità di tornare alla tabella di base (bookmark lookup/key lookup) per recuperare il valore per Column2
.
vale a dire che rende index2 "copertura" per le query quali
SELECT Column1,Column2
FROM [dbo].[MyTable]
WHERE Column1 = 'X'
E copre anche le query quali
SELECT Column1,Column2
FROM [dbo].[MyTable]
WHERE Column1 = 'X' AND Column2 = 'Y'
Ma index1 potrebbe funzionare meglio per la seconda query in quanto si può chiedere sulle due colonne direttamente (al contrario di essere in grado di cercare su Column1
, quindi, è necessario valutare tutte le righe corrispondenti a livello di indice per vedere se soddisfano il predicato Column2
). Se Column2
non viene mai utilizzato come un predicato di ricerca rispetto a tale indice e le query su tale indice non trarrebbero vantaggio dall'avere Column2
ordinato, allora dovrebbe essere aggiunto come colonna INCLUDE
per mantenere la dimensione della chiave verso il basso e ridurre il numero di pagine nell'indice.
(*) Il motivo dico "potrebbe non" di cui sopra è perché se Column2
è (in parte) la chiave di indice cluster è will still be added there anyway per un indice non cluster non è stato creato con l'opzione UNIQUE
.
fonte
2012-05-31 06:39:55
grazie mille. –