Bonjour,
J'ai pu constaté aujourd'hui que l'appel d'une fonction à l'intérieur d'une clause WHERE faisait ralentir énormément l'exécution de la requête (de l'ordre de 30s contre 1s).
Si je fais (pseudo code)
ma requête s'exécute en 30s à peu près, sachant que la fonction fait juste un count(*) sur une autre table et retourne à peu près 6000 lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT champ1, champ2, uf_MaFonction(UnParametre) AS Nb FROM maTable INNER JOIN monAutreTable
Mais si je fais :
Cette fois ma requête s'exécute en 1s (en reprenant juste le code de la fonction précédente et en la mettant directement dans la clause SELECT comme ci dessus en tant que sous-requête)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT champ1, champ2, (SELECT Count(*) FROM encoreUneAutreTable) AS Nb FROM maTable INNER JOIN monAutreTable
Je comprends à priori que la fonction doit certainement s'exécuter pour chaque ligne ce qui ralentit son exécution comparé à priori à l'utilisation de la sous-requête qui à priori s'exécute sur le résultat de ma requête principal. Est ce que je me trompe ?
Y a t'il une explication précise quelque part dans la MSDN ou ailleurs sur ça (mes recherches n'ont pas été fructueuse je l'avoue et la solution de facilité de venir sur le forum s'est présenté à moi) ?
Avez vous votre propre explication ?
D'avance merci beaucoup
Partager