Bonjour à tous,
Petite question SQL, sur un requête avec jointure externe.
J'ai une base avec deux tables, une comprenant une liste d'entrée avec un ID (T1.item), des champs d'info (T1.UseTime, T1.Code, T1.Status, T1.Qty) et une autre table avec tous les ID possibles des Item (T2.itemID) présent dans la première table.
L’objectif est de récupérer toutes avec un UseTime, un Code et un Status donné sur tous les item qui existent, pas seulement ceux retournées par la une requête sur T1.
Exemple :
T1.Item;T2.itemID;Sum(T1.Qty)
1;1;950
2;2;1986
3;3;NULL
4;4;54
5;5;NULL
et pas seulement
1;1;950
2;2;1986
4;4;54
J'ai donc utilisé le SQL suivant :
Le résultat est OK. Par contre le temps d’exécution me parait un peu long (10s).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT T1.item, T2.itemID, Sum(T1.Qty) FROM database.dbo.table1 T1 RIGHT OUTER JOIN database.dbo.table2 T2 ON T1.item = T2.itemID AND (T1.UseTime>='2011-09-01 00:00:00' AND T1.UseTime<='2011-09-02 00:00:00') AND (T1.Code=0 AND T1.Status=23 ) GROUP BY T1.item, T2.itemID ORDER BY T1.item, T2.itemID
Si j’essaye de voir le plan d’exécution estimé de la requête, j’ai l’impression que le moteur fait :
- Une requête liste itemID de la table T2
- Pour chaque itemID retourné, une requête sur la table T1 (soit 70 ! car il y a 70 itemID).
Est-t-il possible d'optimiser cette requête? Je ne connais pas très bien les mécanismes SQL Server.
Merci d’avance de votre expertise.
Partager