|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : février 2011 Messages : 2 ![]() |
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 : Code :
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. |
||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Bonjour,
C'est le plan d'exécution réel qu'il vous faut : il s'obtient en pressant CTRL+M avant l'exécution de la requête, dans SQL Server Management Studio. A la fin de l'exécution de la requête, un nouvel onglet va s'afficher, vous donnant le plan d'exécution réel. Vous pouvez précéder celle-ci de : Ce qui vous donnera le nombre d'IO produites contre chaque table. Avec cet indice et le plan de requête réel, je suis sûr que vous allez trouver l'index manquant. A priori je dirai qu'il vous manque un index sur la colonne T1.Item. D'autre part le calcul d’agrégats (SUM(), COUNT(), ...) sur une colonne qui n'est pas indexée peut s'avérer long. Si vous ne trouvez pas de solution, postez le plan d'exécution réel. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#3 | ||||||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Au passage votre requête gagnerait à être écrite de la sorte :
Code :
Code :
Code :
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||||||
|
00
|
Copyright © 2000-2012 - www.developpez.com