10
votes

SQL Server utilisera-t-il un index composé lorsque seule une seule colonne est dans la clause WHERE?

Dis avoir une table:

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


0 commentaires

3 Réponses :


10
votes

SQL Server peut utiliser l'index (nom Nom, prénom) pour les requêtes sur Just Nom et les requêtes sur les deux?

Oui, la base de données utilisera l'index (nom de famille, prénom) pour les requêtes sur SlastName. Il sera pas utiliser cet index uniquement pour les requêtes uniquement sur le prénom cependant.

stocke-t-il des pièces d'index composés à droite ou à droite?

stockage est dans un B-Tree . Si vous y considérez comme étant stocké à gauche ou à gauche à droite, il suffit d'une aide de visualisation utile, et non liée au stockage réel des données.


2 commentaires

Je veux dire: lorsque vous construisez la clé pour mettre dans l'arbre B, la clé d'un indice composé (A, B, C) est-elle stockée comme (A, B, C) ou (C, B, A), ou est-ce Jusqu'à SQL Server de choisir un arbitrairement?


Je pense que ce qu'il veut dire, c'est comment la clé est construite. La réponse est laissée à droite, exactement comme vous définissez la clé. Et c'est pourquoi il ne peut pas être utilisé pour rechercher un nom de famille.



1
votes

Oui, si vous interrogez seul sur le nom d'autre nom, il devrait utiliser l'index (nom Nom, prénom). Il serait donc utilisé à la fois lorsqu'il serait interrogé par un nom de nom, ou un nom de nom et un nom de famille ensemble.

Guidage général est de s'assurer que la colonne avec la plus grande sélectivité apparaît d'abord dans l'index du composé, car cela fournit le plus d'avantage / rétrécit le résultatté plus tôt avant les colonnes suivantes, moins sélectives.


0 commentaires

1
votes

Selon la requête réelle que vous envoyez, un index composite sur deux colonnes peut être utilisé même si vous recherchez uniquement la 2e colonne. Cependant, vous n'obtiendrez pas de recherche d'index, mais probablement un scan d'index. Si cela est "assez bon" pour vous, dépend de votre environnement spécifique. L'indexation est plus d'un art qu'une science et de nombreux facteurs différents influent sur votre décision sur la manière d'indexer une table. C'est toujours un compromis comme ayant trop d'indices sur une table est tout aussi mauvais que d'avoir trop peu. Assurez-vous que vos requêtes les plus cruciales sont bien couvertes, puis décidez au cas par cas si tout index supplémentaire mérite son coût.

En outre, comme il n'a pas encore été mentionné et que vous aurez au moins un au moins sur SQL Server 2005: permettez-moi de jeter la clause Include pour les indices non clusters. C'est un ajout négligé, mais vraiment utile à toute stratégie d'indexation.


0 commentaires