web-dev-qa-db-fra.com

Ce que je peux faire pour accélérer la recherche clé dans ma requête

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.

This is how looks like my Execution plan

5
adopilot

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.

12
gbn