web-dev-qa-db-ja.com

クエリのキー検索を高速化するために私ができること

私は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

これは、実行プランを見るとクエリが遅く、71%のコストがキールックアップによって取得されていることがわかります。

このクエリをシードするために私ができること。

This is how looks like my Execution plan

5
adopilot

インデックスを作成して削除 covering

つまり、必要なすべての列がインデックスに含まれるように、INCLUDE句をインデックスに追加します。

12
gbn