Ok, donc je me rends compte que c'est une question assez vague, mais faites attention à moi.Pourquoi une jointure SQL choisit-elle un plan de requête sous-optimal?
J'ai rencontré ce problème à plusieurs reprises avec des requêtes différentes et sans rapport. La requête ci-dessous prend plusieurs minutes pour exécuter:
SELECT <Fields>
FROM <Multiple Tables Joined>
LEFT JOIN (SELECT <Fields> FROM <Multiple Tables Joined>) ON <Condition>
Cependant, en ajoutant simplement l'indicateur de jointure, il interroge les exécute en quelques secondes:
SELECT <Fields>
FROM <Multiple Tables Joined>
LEFT HASH JOIN (SELECT <Fields> FROM <Multiple Tables Joined>) ON <Condition>
La chose étrange est le type de REJOIGNEZ spécifié dans la indice n'est pas vraiment ce qui améliore la performance. Il semble être dû au fait que l'indicateur oblige l'optimiseur à exécuter la sous-requête de manière isolée, puis à la joindre. Je vois la même amélioration de performance si je crée une fonction de table (pas en ligne) pour la sous-requête. par exemple. Quelqu'un at-il des idées pour lesquelles l'optimiseur est si bête dans ce cas?
Quelle version de SQL Server utilisez-vous? – Austin
J'ai rencontré le problème à la fois en 2005 et en 2008 –