我可以做些什么来加快查询中的键查找

ado*_*lot 5 index sql-server-2005 sql-server execution-plan

我正在使用 SQL2005 并针对它们调用查询 simila 对此

    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
Run Code Online (Sandbox Code Playgroud)

当我查看执行计划时,这个查询很慢,我看到 71% 的成本是由 Key Lookup 执行的。

我可以做些什么来建立这个查询。

这就是我的执行计划的样子

gbn*_*gbn 12

通过使索引覆盖来删除它

也就是说,向索引添加一个 INCLUDE 子句,以便所有需要的列都在索引中。