J'ai la requêteplus efficace de se joindre à gauche grande table
select P.peopleID, P.peopleName, ED.DataNumber
from peopleTable P
left outer join (
select PE.peopleID, PE.DataNumber
from formElements FE
inner join peopleExtra PE on PE.ElementID = FE.FormElementID
where FE.FormComponentID = 42
) ED on ED.peopleID = P.peopleID
suivant (simplifié) Sans la sous-requête cette procédure prend environ 7 secondes, mais avec elle, il faut compter environ 3 minutes. Étant donné que le tableau peopleExtra
est plutôt volumineux, existe-t-il un moyen plus efficace d'effectuer cette jointure (à moins de restructurer la base de données)?
Plus de détails:
La partie interne de la sous-requête, par exemple
select PE.peopleID, PE.DataNumber
from formElements FE
inner join peopleExtra PE on PE.ElementID = FE.FormElementID
where FE.FormComponentID = 42
prend entre < 1 et 5 secondes pour exécuter, et retourne 95k lignes
Il y a 1500 entrées dans le peopleTable.
C'est correct comme sous-requête tant que les utilisateurs sont filtrés de manière significative dans la jointure. Si, après la jointure, il y a un grand nombre de lignes résultantes dans votre sous-requête, il est probablement plus approprié de le reformer en une jointure supplémentaire, comme @Orbman l'a fait. – SqlRyan