10 votes

Index composite et index de couverture INCLUDE dans SQL Server

Je comprends que les index composites sont toujours utilisés de gauche à droite (par exemple, si un index porte sur la ville et l'État, WHERE City = "Blah" ou WHERE City = "Blah" AND State = "AA" fonctionnerait bien, mais WHERE State = "AA" ne fonctionnerait pas).

Ce même principe s'applique-t-il aux index INCLUDE ?

Merci d'avance !

Argile

20voto

Joe Stefanelli Points 72874

Les colonnes d'inclusion ne peuvent être utilisées que pour fournir des colonnes à la base de données SELECT de la requête. Ils ne peuvent pas être utilisés comme partie de l'index pour le filtrage.

EDIT : Pour clarifier davantage mon propos, prenons l'exemple suivant :

Je crée un tableau simple et je le remplis :

create table MyTest (
    ID int,
    Name char(10)
)

insert into MyTest
    (ID, Name)
    select 1, 'Joe' union all
    select 2, 'Alex'

Considérons maintenant ces 3 index et leurs plans d'exécution correspondants pour un simple SELECT.

select ID, Name
    from MyTest
    where Name = 'Joe'

Cas 1 : Un index sur l'ID uniquement donne lieu à un SCAN DE TABLE.

create index idx_MyTest on MyTest(ID)

alt text

Cas 2 : Un index sur l'ID, y compris le nom. C'est 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 3 : Un index sur les noms, y compris les identifiants. C'est le meilleur. L'index est construit sur la colonne de ma clause WHERE, j'obtiens donc une opération SEEK, et l'index couvre la requête grâce à la colonne incluse.

create index idx_MyTest on MyTest(Name) include (ID)

alt text

2voto

BradC Points 18833

Non, les champs d'inclusion ne sont pas ordonnés.

Voici quelques considérations supplémentaires concernant la conception :

http://msdn.microsoft.com/en-us/library/ms190806.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X