Bonjour à tous,
Je me posais une question bête sur l'ajout d'un index pour accélérer les perfs de requêtes de jointure.
Je suis sous SQL Server 2008 R2.
J'ai une table CONTACT avec un champ [ID], IDENTITY, PRIMARY KEY donc indexé en cluster.
J'ai ensuite une table CONTRAT avec également un champ [ID] clusterisé.
Chaque CONTRAT concerne un CONTACT.
Dans la table CONTRAT il y a donc un champ ID_CONTACT qui fait référence à un ID de la table CONTACT.
En revanche, un contact peut avoir plusieurs contrats, donc il peut y avoir plusieurs fois le même ID_CONTACT dans la table CONTRAT.
Je précise que le champ ID_CONTACT n'a aucune contrainte SQL : il n'a ni contrainte SQL, ni relation SQL avec le champ CONTACT.ID.
Ce modèle de données simple est exploité par un logiciel qui sera susceptible de rechercher des CONTACT en fonction des caractéristiques de ses contrats.
La requête de base qui sera envoyée sera du type :
Je cherche à optimiser la jointure CONTRAT.NUM_IDENTIFIANT_OGC=CONTACT.ID du WHERE EXISTSpar l'ajout d'un index sur CONTRAT.NUM_IDENTIFIANT_OGC.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT ID FROM CONTACT WHERE EXISTS (SELECT 1 FROM CONTRAT (NOLOCK) WHERE CONTRAT.NUM_IDENTIFIANT_OGC=CONTACT.ID AND (<clause where contrat>))
Etant donné que le champ NUM_IDENTIFIANT_OGC n'est pas unique, est-il plus performant d'ajouter un index non unique sur ce champ ou un index unique composé de NUM_IDENTIFIANT_OGC et du champ ID (ce dernier étant unique donc la combinaison des deux forcément aussi) ?
D'avance merci
Partager