Inclure des colonnes ne peuvent être utilisées pour fournir des colonnes à la partie SELECT
de la requête. Ils ne peuvent pas être utilisés dans le cadre de l'index pour le filtrage.
EDIT: Pour clarifier davantage mon point, considérez cet exemple:
Je crée une table simple et remplissiez:
create table MyTest (
ID int,
Name char(10)
)
insert into MyTest
(ID, Name)
select 1, 'Joe' union all
select 2, 'Alex'
considèrent maintenant ces 3 indices et leurs plans d'exécution correspondants pour un simple SELECT.
select ID, Name
from MyTest
where Name = 'Joe'
Cas 1: Un index sur les résultats seulement ID dans un SCAN TABLE.
create index idx_MyTest on MyTest(ID)
Cas n ° 2: Un index sur ID y compris le nom. Un peu mieux parce que l'index couvre la requête, mais j'obtiens toujours une opération SCAN.
create index idx_MyTest on MyTest(ID) include (Name)
Cas n ° 3: Un index sur Nom ID y compris. C'est le meilleur. L'index est construit sur la colonne dans ma clause WHERE, donc j'obtiens une opération SEEK, et l'index couvre la requête à cause de la colonne incluse.
create index idx_MyTest on MyTest(Name) include (ID)
Merci Joe. Je peux voir où ils ne seraient pas utiles d'eux-mêmes, mais s'ils ne pouvaient pas être utilisés pour le filtrage, leur existence ne serait pas très utile. – PseudoToad
Je ne m'occupe pas d'un vote négatif si je me trompe, mais je n'aime pas un vote anonyme sans explication. Pouvez-vous expliquer votre objection? –
-1 Je ne suis pas d'accord avec "ils ne peuvent pas être utilisés comme partie de l'index pour le filtrage". Vous pouvez créer un index de cvoering, ajouter une condition sur une colonne dans la clause INCLUDE et l'index sera toujours couvert. Mon downvote n'est pas anonyme. –