2010-08-06 5 views
2

Lorsque je déclare un index cluster, en spécifiant: column1, column2 et column3 dans cet ordre - dois-je utiliser les colonnes dans le même ordre?Dois-je utiliser plusieurs colonnes index SQL Server dans le même ordre que je le déclare?

Par exemple, est-ce cela, utilisez l'index cluster mentionné précédemment de mettre à jour plusieurs lignes:

UPDATE Table1  
    WHERE column3 = 1 
     AND column2 = 1 
     AND column1 = 1 
+0

Veuillez clarifier votre question, je ne suis pas vraiment sûr de ce que vous demandez réellement ici. – Ross

+0

Moi non plus. Je ne comprends pas ce qu'il essaie de dire. – ppshein

+0

Un index clusterisé et non clusterisé peut être un index de couverture. Un index de couverture signifie que l'index fait référence à plusieurs colonnes. Un index clusterisé implique qu'il s'agit de la clé primaire de la table, mais ce n'est pas forcément le cas. –

Répondre

3

L'ordre que vous utilisez déclarer les éléments de la clause Where, comme vous l'avez dit, ne devrait pas faire une différence si le serveur de base de données est capable d'utiliser un index qui couvre ces colonnes.

+0

Mon collègue vient de me dire que je devrais utiliser les colonnes d'index dans la même séquence que je les déclare. Mais je n'ai trouvé aucun document pour cette exigence. –

+0

@Tony Bao: L'ordre dans la requête n'est pas pertinent, mais l'ordre dans l'index de couverture est important. –

+0

@Tony Bao - Le moteur de recherche est assez intelligent pour savoir que les colonnes référencées correspondent à un index existant. L'ordre que vous énoncez les colonnes ne fait pas de différence. C'est assez facile à tester. Créez une requête qui utilise l'index et changez l'ordre des colonnes pour voir si le plan d'exécution change (indice: ce ne sera pas le cas). – Thomas

1

Il est vrai que lorsque vous vérifiez l'égalité exacte, cet ordre n'a pas d'importance. Mais cela ne veut pas dire que l'ordre dans l'index n'a pas d'importance - c'est peut-être ce que votre collègue essayait de dire. Par exemple, si j'ai une table:

PersonID FName LName 
-------- ------- ----- 
1   John  Smith 
2   Bill  Jones 
3   Frank Smith 
4   Jane  Jackson 
... 
(assume a significantly large table) 

et je définis un index sur dans l'ordre (LName, FName), cet indice va nécessairement effectuer différemment un index défini dans l'ordre (FName, LName) , en fonction de la requête. Par exemple, pour la requête SELECT * FROM People WHERE LName = 'Smith', vous obtiendrez probablement un meilleur plan pour le premier type d'index que pour le second type.

De même, SELECT * FROM People WHERE FName = 'John' fonctionnera mieux avec la seconde structure d'index par rapport à la première.

Et SELECT * FROM People WHERE FName = 'John' AND LName = 'Smith' fonctionnera à l'identique quel que soit l'ordre dans lequel l'index est créé.

Questions connexes