Tuning SQL - Jointure complète
Bonjour,
J'ai une requête qui prend, à mon avis, trop de temps à d'exécuter par rapport à ce qu'il pourrait en être avec une véritable optimisation. Voici la requête en question, qui s'exécute en un peu plus de 2 minutes :
Code:
1 2 3 4 5 6 7
| select
A.idA,
B.idB,
A.champDetail1,
B.champDetail2
from A inner join B
on A.idB = B.idB |
La table A contient environ 16 millions d'enregistrements, tandis que B en contient 3 millions.
A.idA est la PK de A, et B.idB est la PK de B. Il y a sémantiquement une relation de clé étrangère entre A.idB et B.idB, mais, pour des raisons annexes, cette clé étrangère n'est pas implémentée.
La colonne A.idB a cependant été indexée (nonclustered, autres options par défaut).
Voici l'explain plan de la requête :
http://i.imgur.com/eEo6a.png
Je ne comprends pas pourquoi un scan de la PK de A est réalisé, plutôt qu'un scan de l'index positionné sur A.idB.
Un update statistics a évidemment été réalisé manuellement sur A ainsi que B.
Je ne suis pas un spécialiste du tuning SQL-Server, et j'ai uniquement quelques notions de base sous Oracle.
Merci pour votre aide, je reste à votre disposition pour toute info nécessaire !