Bonjour à tous !
Voici mon problème :
J'ai écrit une fonction en transact SQL, son temps d'exécution est de 13 secondes lorsque je l'appelle de façon classique, select * from ma_fonction(), pourtant, lorsque je tape le code de ma fonction directement dans un analyseur de requête, le temps d'exécution passe à 6 secondes ! Je me demande pourquoi ce diféré, j'ai essayé d'appeler une fonction "bidon" pour voir s'il ne fallait pas un minimum de temps à SQL Server pour appeler une fonction, et le résultat est venu instantanément ! Je me demande d'où peuvent venir ces 7 secondes de différence !
Voici ma fonction :
DECLARE @annee_min int --année la plus ancienne
DECLARE @annee_max int --année la plus récente
DECLARE @annee_mineur int --année à partir de laquelle les personnes nées sont encore mineures
DECLARE @annee_courante int
--récupération de la date courante depuis la table resid..date, puisque l'appel getDate() est impossible
set @annee_courante=(select DATENAME(year,date) from resid..date)
set @annee_mineur= @annee_courante-18
--calcul de la tranche:
if @age_min=0 set @annee_max=@annee_mineur
else set @annee_max=@annee_courante-@age_min
if @age_max=0 set @annee_min=1900
else set @annee_min=@annee_courante-@age_max
insert into @liste select prenom
from resid..homme_et_femme_ok a
group by prenom
having (
(( (select cast (sum(b.nb) as float)
from resid..homme_et_femme_ok b
where b.annee>=@annee_min AND b.annee<@annee_max AND
b.prenom=a.prenom
group by b.prenom )/ (select
case sum(nb)
when 0 then 100000000.0
else cast(sum(nb) as float)
end
from resid..homme_et_femme_ok c
where c.annee<@annee_mineur and c.prenom=a.prenom
group by c.prenom ))*100)>=@pourcentage)
La réquête d'insert ne prend que 6 secondes, le reste du code est quasi instantané lorsqu'on l'exécute "en live", l'appel parait lui aussi instantané; si quelqu'un pouvait me renseigner cela m'aiderait beaucoup !!
Merci !
Partager