Comment indexer un résultat JOIN de deux ou plusieurs tables afin d'améliorer les performances dans SQL Server?

9

Je suis nouveau dans l'indexation et j'ai suivi les bases de l'indexation. Je peux trouver un index cluster par défaut pour la contrainte de clé primaire dans la partie index de la table correspondante, mais après avoir créé une contrainte de clé étrangère, je ne peux pas en trouver.

Maintenant, j'ai une exigence dans laquelle l'indexation doit être implémentée pour améliorer les performances. J'ai lu sur l' indexation de la clé étrangère afin d'améliorer les performances d'un résultat JOIN .

Dois-je ajouter la colonne de clé étrangère à un index non cluster supplémentaire ou la clé étrangère a une indexation par défaut?

Comment puis-je implémenter efficacement l'indexation si ma structure de table SQL est la suivante et que j'ai une requête JOIN avec la clause WHERE en utilisant t1_col3

               table1                       table2
               ------                       ------
               t1_col1(pk)                  t2_col1(pk)
               t1_col2                      t2_col2
               t1_col3                      t2_col3
               t1_col4                      t2_col4
               t2_col1(FK)
Harun
la source

Réponses:

13

Une clé étrangère n'a pas d'index par défaut. Vous devez en créer un.

Dans ce cas, je suggère l'un ou l'autre. Cela dépend de la sélectivité relative des 2 colonnes

CREATE INDEX IX_table2fk ON
              table1 (t2_col1, t1_col3)
              INCLUDE (any columns needed for the query)

OU

CREATE INDEX IX_table2fk ON
              table1 (t1_col3, t2_col1)
              INCLUDE (any columns needed for the query)

L'INCLURE fera la couverture de l' indice pour éviter les recherches de clés / signets

gbn
la source
1
Inclure était une nouvelle fonctionnalité dans SQL-Server 2005. Juste au cas où vous seriez toujours sur Sql-server 2000.
bernd_k
@bernd_k: Il y a seulement 6 ans et 3 versions :-)
gbn