Un collègue m'a demandé de regarder l'indexation sur certaines tables car sa requête fonctionnait très longtemps. Plus d'une heure.Est-ce un indice de jointure dangereux?
Notez les différentes bases de données. Cela a été exécuté à partir de la base de donnéesB
Les tableaux 1 et 2 étaient longs de plus de 2 millions d'enregistrements. Table3 avait une douzaine d'enregistrements ou plus.
J'ai regardé le plan de requête et l'optimiseur a décidé de faire des recherches d'index nested-loop dans les tables 1 et 2 avec Table3 comme table de pilotage!
Ma première hypothèse était que les statistiques ont été sérieusement foiré sur tableaux1 & 2 mais avant les statistiques de mise à jour j'ai essayé d'ajouter un indicateur de jointure thusly:
select count(1)
from databaseA.dbo.table1
inner HASH join databaseA.dbo.table2 on (table1.key = table2.key)
inner join databaseB.dbo.table3 on (table1.key = table3.key)
résultats retournés en 15 secondes. Comme j'étais à court de temps, je lui ai transmis les résultats, mais je crains que cela puisse entraîner des problèmes sur la route.
Dois-je revoir le problème de statistiques et résoudre le problème de cette façon? Le plan de requêtes incorrectes peut-il provenir de la jointure provenant d'une base de données distincte?
Quelqu'un peut-il me proposer des idées en fonction de votre expérience?