2017-09-18 2 views
1

J'ai une table SchoolMembers, et il a deux colonnes:Index composé et requête sur une seule colonne: ai-je besoin d'un index?

person_id school_id 
------------------------- 
    1134  361 
    1135  362 
     ... 

La clé primaire de cette table est {person_id, school_id}, cette combinaison est unique.

La clé primaire est indexée wih un index appelé PK_dbo.SchoolMembers

  • person_id n'a pas d'index
  • school_id n'a pas d'index
  • {person_id, school_id} a un indice

Question: si j'ai cette requête:

 SELECT * from SchoolMembers where person_id = 1135 

... dois-je avoir un INDEX pour person_id? J'ai besoin de la requête précédente pour être rapide

+2

En cas de doute, incluez le plan d'exécution actuel, exécutez la requête et voyez par vous-même. –

Répondre

7

Question: si j'ai cette requête: SELECT * from SchoolMembers where person_id = 1135 ... dois-je avoir un index pour person_id?

Non. L'index unique sur {person_id, school_id} est suffisant. En général, un index peut être utilisé pour un accès efficace par sa (ses) colonne (s) principale (s).

3

L'ordre des colonnes de la clé primaire fait la différence. Vous avez décrit votre clé comme étant person_id puis school_id. Avec cette configuration, vous devriez obtenir de bonnes performances lors de la recherche sur person_id. Cependant, le contraire n'est pas vrai. Si vous deviez rechercher par school_id, il ne serait pas en mesure de trouver rapidement cette ligne.