2017-12-19 6 views
1

を更新するために、SQL Serverクエリの最適化、私は(表を更新する:Articolo)テーブル内の記事を更新する必要があります。今、別のテーブル内の項目で、(TabellaTemp新しい記事を持つテーブルを)問題は、古い記事をもっと更新しなければならないということです。新しい記事を挿入する必要があります!これを行うには、以下のクエリを使用します。最初の記事は既存の記事を更新し、2番目の記事は新しい記事を挿入し、2番目のクエリは実際に非常に遅く、新しい記事を挿入するのに20分ほどかかります(記事は50万以上です)。 Sql Serverでこのクエリのパフォーマンスを向上させる方法はありますか?大きなリストに

は、私はここのテーブルの構造を入力する:http://www.sqlfiddle.com/#!6/4f4ea

QUERY 1:

Update Articolo set Articolo.Stato = 'Disponibile',Articolo.Prezzo = TabellaTemp.PRZNETTO,Articolo.PrezzoListino = TabellaTemp.PRZCASA,Articolo.DataAggiornamento = TabellaTemp.DATAAGG,Articolo.Descrizione = TabellaTemp.DESCR,Articolo.UM = TabellaTemp.UM 
from Articolo 
inner join TabellaTemp 
on TabellaTemp.CodMarca = Articolo.CodMarca and TabellaTemp.CODART = Articolo.CodArt 
where Articolo.Importato = 'COMET' 

クエリ2:

Insert into Articolo(CodMarca, CodArt, Descrizione, UM, Prezzo, PrezzoListino, DataAggiornamento, Fornitore, Importato) 
SELECT CODMARCA, CODART, DESCR, UM, PRZNETTO, PRZCASA, DATAAGG,'COMET' as Fornitore,'COMET' as Importato 
FROM TabellaTemp as T 
where CODART not in (select CodArt from Articolo where Importato = 'COMET') and CODMARCA not in (select CodArt from Articolo where Importato = 'COMET') 

答えて

1

で文の交換が存在します大きなformance改善

Insert into Articolo(CodMarca, CodArt, Descrizione, UM, Prezzo, PrezzoListino, DataAggiornamento, Fornitore, Importato) 
SELECT 
    CODMARCA, 
    CODART, 
    DESCR, 
    UM, 
    PRZNETTO, 
    PRZCASA, 
    DATAAGG, 
    'COMET' as Fornitore, 
    'COMET' as Importato 
    FROM TabellaTemp as T 
     WHERE NOT EXISTS 
     (
      select 1 from Articolo where Importato = 'COMET' AND (CodArt =T.CodArt OR CodArt = T.CODMARCA) 
     ) 

また、パフォーマンスを向上させるために、テーブルTabellaTempの列のインデックスを作成してみてください

+0

おかげで今のトランジスタは、コンピュータの外に飛ぶように速いこと速いです!普段はいつも使っていましたが、やり方が変わります!再度、感謝します – riki

関連する問題