Salut à tous,
Je rencontre un phénomène étrange que je ne sais pas expliquer. Je suis sous Firebird 2.5, et mon logiciel est développé avec Delphi6 (mais j'ai le même phénomène si j'utilise DataBase Workbench, EMS)
J'ai la requête suivante :
Cette requête met un certain temps à s’exécuter (A environ 30000 lignes, B 5 lignes, C environ 200 lignes, D 10 lignes)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT .... FROM A LEFT JOIN B ON A.FKB=B.PK LEFT JOIN C ON A.FKC=C.PK LEFT JOIN D ON C.FKD=D.PK
Si je transforme les LEFT JOIN en INNER JOIN sur C et D, je n'ai quasiment pas de variation de temps d’exécution (idem si je supprime carrément la jointure sur D)
Par contre si je transforme la jointure sur B en INNER JOIN, non seulement j'ai le temps d’exécution qui est divisé par, mais aussi et surtout le temps de parcours des résultats diviser quasiment par 10
Je ne comprend pas pourquoi la modification de la jointure sur B a une telle incidence alors que le modification de la jointure sur C n'a aucune incidence.
B et C ont des structures similaires, clé primaire, index asc et desc sur la clé primaire, jointure sur la clé primaire.
Partager