Bonjour à vous,
Je m'interroge sur une chose concernant la vitesse d'exécution dans le cas où on utilise des fonctions par rapport à si on ne les utilisait pas. Par exemple, imaginez que je fasse une fonction dont le but serait de retourner une valeur nommée "get_info_table2" :
Maintenant, j'aimerais savoir si faire :Code:
1
2
3
4
5
6
7
8
9
10 BEGIN DECLARE result VARCHAR(64); set result = ""; SELECT table2.type INTO result FROM table2 WHERE table2.id=_id ORDER BY table2.timestamp DESC LIMIT 1; RETURN result; END
serait plus rapide, plus lent, ou équivalent àCode:
1
2
3
4 SELECT table.id, table.nom, get_info_table2(table.id) as info FROM table WHERE *
Bon je sais qu'en l'occurence, l'exemple est un peu con et qu'il serait sans doute plus élégant de faire une jointure mais c'est la vitesse d'exécution d'une fonction que j'aimerais discuter ici... En d'autres termes, ma question est : "créer une fonction et utiliser son nom dans une requête est-il plus rapide que de mettre le code de la fonction directement dans la requête qui l'utilise ??"Code:
1
2
3
4
5
6
7
8
9 SELECT table.id, table.nom, (SELECT table2.type INTO result FROM table2 WHERE table2.id=table.id ORDER BY table2.timestamp DESC LIMIT 1) as info FROM table WHERE *
L'avantage que je vois à créer une fonction est que la "maintenance" est plus facile : si ce bloc est utilisé dans plusieurs requêtes et qu'il doit être modifié par la suite, il me suffira de le modifier une seule fois (dans la déclaration de fonction) pour que le changement se répercute partout bien sûr... Mais si c'est calamiteux en terme de performances, ce n'est peut-être pas idéal non plus...
Merci pour vos retours d'expérience(s) et vos avis ! :-)
RL