Pour privilégier des étapes bien séparées , je proposerais aussi la requête ci-dessous, à comparer avec la solution d'un index sur la fonction. (Mais c'est vrai qu'il vaut mieux éviter les jointures sur les fonctions en générale bien que les index sur fonctions existent depuis un certain nombre de version d'Oracle).
1 2 3 4 5 6 7
| SELECT c1, c2, c3
FROM
(SELECT c1, ma_fonction(tab1.c3) c3_f
FROM ma_premiere_table )
tab1
INNER JOIN ma_deuxieme_table tab2
ON tab2.c3=tab1.c3_f |
Comme ça, cela exécute la fonction pour chaque ligne lors du sous-SELECT, mais lors de la jointure le résultat de la fonction a déjà été calculée dans la sous-requête.
Partager