Bonjour Tout le monde,

J'utilise sql server 2008, j'ai un souci sur un between de date.
Mon probleme est le suivant, j'avais une requete qui m'afficher les données entre deux dates, ces dates sont récupérées dans une table, le type des colonnes est datetime. la requete met moins d'une seconde.jusqu'à la tout va bien. Cette requete est inserer dans procedure stockées. voir req1

le besoin a evolué et maintenant les dates doivent etre passées en parametre. c'est ce que j'ai fait sur la req2, mais la requete met 1 min pour afficher le resultat pour les mêmes dates utiliser dans la req1.
quelqu'un aurait il une solution pour ameliorer mes temps de réponses


req1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
select  distinct sect.lg_nomparent lg_nomparent,count(distinct t.AccountId) nb,convert (nvarchar(max),ouv.lg_datededebut,112),
  COUNT(DISTINCT cr.lg_compterenduid) AS nbr_CR,convert (nvarchar(max),ouv.lg_datedefin,112) --into #J
 from Lg_compterendu  cr 
 inner JOIN  lg_systemuser_lg_compterendu AS cr_usr ON cr_usr.lg_compterenduid = cr.lg_compterenduid 
 inner JOIN  SystemUser AS usr ON usr.systemuserid = cr_usr.systemuserid
 inner join lg_lg_pole_systemuser pole_usr on pole_usr.systemuserid=usr.systemuserid
 inner join Lg_pole pole on pole_usr.lg_poleid=pole.lg_poleid
 inner join lg_marque_lg_compterendu marq_cr on marq_cr.lg_compterenduid=cr.lg_compterenduid
 inner join Lg_marque marq on marq.lg_marqueid=marq_cr.lg_marqueid
 inner join lg_contact_lg_compterendu cont_cr on cont_cr.lg_compterenduid=cont_cr.lg_compterenduid
 inner join Contact cont on cont.contactid=cont_cr.contactid
 inner join Lg_ouvertureterrainsdejeu ouv on ouv.lg_commercial=usr.systemuserid,Account acc
 INNER JOIN Lg_terraindejeu AS terrain ON terrain.lg_annonceur = acc.accountid
 inner join (select tot.AccountId,tot.lg_client from (
             select AccountId,AccountId lg_client from account a
             union 
             select v.lg_tiersdefacturation AccountId,lg_client  from Lg_tiersdefacturation v) tot) t 
             on acc.AccountId=t.lg_client
  inner join Lg_secteurdactivite sect on sect.lg_secteurdactiviteid=terrain.lg_secteurdactivite
  
  where 
 marq.lg_client=t.accountid
and cr.lg_compterenduid=cont_cr.lg_compterenduid
and terrain.lg_commercial=usr.systemuserid 
  and cont.lg_fonctionlp in( '29','19','16')
  and convert(nvarchar(max),cr.lg_daterdv,112)  BETWEEN convert (nvarchar(max),ouv.lg_datededebut,112) AND convert (nvarchar(max),ouv.lg_datedefin,112)  and pole.lg_poleid='9B5092D3-7774-DF11-9725-00505684640D'
    group by sect.lg_nomparent,convert (nvarchar(max),ouv.lg_datededebut,112),convert (nvarchar(max),ouv.lg_datedefin,112)
  HAVING      COUNT(DISTINCT cr.lg_compterenduid) >= 1
req2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
select  distinct sect.lg_nomparent lg_nomparent,count(distinct t.AccountId) nb,convert (nvarchar(max),ouv.lg_datededebut,112),
  COUNT(DISTINCT cr.lg_compterenduid) AS nbr_CR,convert (nvarchar(max),ouv.lg_datedefin,112) --into #J
 from Lg_compterendu  cr 
 inner JOIN  lg_systemuser_lg_compterendu AS cr_usr ON cr_usr.lg_compterenduid = cr.lg_compterenduid 
 inner JOIN  SystemUser AS usr ON usr.systemuserid = cr_usr.systemuserid
 inner join lg_lg_pole_systemuser pole_usr on pole_usr.systemuserid=usr.systemuserid
 inner join Lg_pole pole on pole_usr.lg_poleid=pole.lg_poleid
 inner join lg_marque_lg_compterendu marq_cr on marq_cr.lg_compterenduid=cr.lg_compterenduid
 inner join Lg_marque marq on marq.lg_marqueid=marq_cr.lg_marqueid
 inner join lg_contact_lg_compterendu cont_cr on cont_cr.lg_compterenduid=cont_cr.lg_compterenduid
 inner join Contact cont on cont.contactid=cont_cr.contactid
 inner join Lg_ouvertureterrainsdejeu ouv on ouv.lg_commercial=usr.systemuserid,Account acc
 INNER JOIN Lg_terraindejeu AS terrain ON terrain.lg_annonceur = acc.accountid
 inner join (select tot.AccountId,tot.lg_client from (
             select AccountId,AccountId lg_client from account a
             union 
             select v.lg_tiersdefacturation AccountId,lg_client  from Lg_tiersdefacturation v) tot) t 
             on acc.AccountId=t.lg_client
  inner join Lg_secteurdactivite sect on sect.lg_secteurdactiviteid=terrain.lg_secteurdactivite
  
  where 
 marq.lg_client=t.accountid
and cr.lg_compterenduid=cont_cr.lg_compterenduid
and terrain.lg_commercial=usr.systemuserid 
  and cont.lg_fonctionlp in( '29','19','16')
  and convert(nvarchar(max),cr.lg_daterdv,112)  BETWEEN '20090831' AND '20100830'  and pole.lg_poleid='9B5092D3-7774-DF11-9725-00505684640D'
    group by sect.lg_nomparent,convert (nvarchar(max),ouv.lg_datededebut,112),convert (nvarchar(max),ouv.lg_datedefin,112)
  HAVING      COUNT(DISTINCT cr.lg_compterenduid) >= 1