Est-ce que SQL Server utilise un index composé quand une seule colonne est dans la clause WHERE?

StackOverflow https://stackoverflow.com/questions/2228192

Question

Disons que j'ai une table:

CREATE TABLE Users (
    Id INT IDENTITY (1, 1),
    FirstName VARCHAR(40),
    LastName VARCHAR(40)
)

Les requêtes sont habituellement FirstName ou LastName , mais aussi sur FirstName LastName .

Si je crée un index non cluster sur FirstName et un autre sur LastName , puis mes deux premières requêtes sont pris en charge. Apparemment, SQL Server utilisera index intersection pour l'autre requête.

Par ailleurs, si je indexees sur (FirstName) et (LastName, FirstName), peut / ne SQL Server utilise le second index pour les requêtes uniquement sur LastName , ainsi que des requêtes sur les deux?

Est-ce que des pièces d'index composé de magasin SQL Server de gauche à droite ou de droite à gauche? En d'autres termes: il va construire la clé comme LastNameFirstName ou PrenomNom? Ou est-il libre de choisir arbitrairement?

Était-ce utile?

La solution

  

peut / ne SQL Server utilise l'index (LastName, FirstName) pour les requêtes sur tout LastName, ainsi que des requêtes sur les deux?

Oui, la base de données utilisera l'index (LastName, FirstName) pour les requêtes sur LastName. Il sera pas utiliser cet index pour les requêtes uniquement sur FirstName bien.

  

-t-il des pièces d'index composé du magasin de gauche à droite ou de droite à gauche?

Le stockage est dans un B-Tree . Que vous pensez comme étant stocké de droite à gauche ou à gauche à droite est juste une aide de visualisation utile, et non liés au stockage des données réelles.

Autres conseils

Oui, si vous interrogez sur LastName seul, il doit utiliser l'index (LastName, FirstName). Il serait donc utilisé aussi bien lors de l'interrogation par la seule LastName, ou LastName et FirstName ensemble.

Directive générale est d'assurer la colonne avec la plus grande sélectivité apparaît d'abord dans l'indice composé que cela donne le plus d'avantages / rétrécissant vers le bas le plus tôt avant resultset ce qui suit, des colonnes moins sélectives.

En fonction de la requête réelle que vous envoyez, un indice composite sur deux colonnes peut être utilisée même si vous recherchez la 2ème colonne uniquement. Cependant, vous ne serez pas obtenir un indice cherchent, mais plus probablement scanner un index. Si cela est « assez bon » pour vous, dépend de votre environnement. L'indexation est plus un art qu'une science et beaucoup de différents facteurs influencent votre décision sur la façon d'indexer une table. Il est toujours un compromis comme ayant trop d'indices sur une table est tout aussi grave que d'avoir trop peu. Assurez-vous que vos questions les plus cruciales sont bien couverts et décider au cas par cas si un indice supplémentaire vaut son coût.

En outre, comme il n'a pas été encore mentionné et à condition que vous êtes au moins sur SQL Server 2005: Permettez-moi de jeter dans la disposition incluraient des indices nonclustered. Il est un négligé, mais plus vraiment utile à toute stratégie d'indexation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top