2010-10-07 4 views
8

Je comprends que les index composites sont toujours utilisés de gauche à droite (par exemple, si un index était sur Ville, État, WHERE Ville = "Blah" ou WHERE Ville = "Blah" ET État = "AA" fonctionnerait bien mais WHERE State = "AA" ne le ferait pas).Indice composite vs. Indice de couverture INCLUDE dans SQL Server

Est-ce que ce même principe s'applique aux index INCLUDE?

Merci d'avance!

Argile

Répondre

13

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) 

alt text

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) 

alt text

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) 

alt text

+0

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

+0

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? –

+0

-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. –