Bonjour,
j'ai un petit souci de compréhension, j'ai une requête récursive qui fonctionne très bien pour des nomenclatures d'articles. Cette requête est enregistrée en tant que une vue.
si j'interroge cette vue sur différents critères, la réponse est instantanée :
Cette vue en total ramène 1 million de lignes en 30 secondes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select rec.* from VUEREC rec where rec.CRI1='critere1' and rec.CRI2=40 and rec.CRI3=1
J'ai une table à côté qui s'exécute aussi instantanément pour me ramener une ligne de résultat (interroger précédemment dans la vue) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select count(*) from VUEREC
Si je veux la nomenclature du résultat précédent, je réalise une jointure comme celle-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select t1.* from TABLE1 t1 where t1.CLEA1='Cle1' and t1.CLEN2=36788
J'ai bien mon résultat précédent mais en 30 secondes !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select rec.* from VUEREC rec inner join TABLE1 t1 on (t1.CLEA2=rec.CRI1 and t1.CLEN1=rec.CRI2) where t1.CLEA1='Cle1' and t1.CLEN2=36788 and rec.CRI3=1
Cela sous-entend que la vue est entièrement générée avant de faire la jointure.
Comment faut-il faire pour que le résultat de la vue soit filtré correctement ?
Merci de votre aide,
je dois passer à côté d'un principe important...
Partager