J'utilise SQL2005 et contre eux, j'appelle la requête Simila à cette
declare @art table (id int primary key, naziv varchar(35) null, sifra varchar(15) null, jm int null);
insert into @art
select id, left(naziv,35), left(sifra,15), jm from art a
where (a.id = @art_id@ or @art_id@ = 0 )
Select
s.art_id
,sum(kol) as kol
,sum(kol*mpc) as MPCI
/*--and meny others --/
from doc d
inner join dokumenti dk on (d.tip = dk.tip)
inner join sdo s on (d.id=s.doc_id)
where
d.datum between @do_datuma@ and @do_datuma@
and dk.prodaja = 1
and (dk.Mal_Vel in (@Mal_Vel@))
and (d.skl_id = @skl_id@ or (@skl_id@ = 0))
and ((d.skl_id in (select skl_id from skladiste_gruperj where grp_id = @gr_rj_id@)) or ( @gr_rj_id@ = 0))
and (d.par_id = @par_id@ or @par_id@ = 0)
and s.art_id in (select id from @art)
group by s.art_id
C'est la requête est lente lorsque je vais examiner le plan d'exécution, je vois que le coût de 71% est pris par une recherche clé.
Ce que je peux faire pour semer cette requête.
Retirez-le en faisant l'index revêtement
Autrement dit, ajoutez une clause Inclure à l'index afin que toutes les colonnes nécessaires soient dans l'index.