优化Sql Server查询以更新大列表

用户名

我必须在一个表(要更新的表:Articolo)中更新项目,在另一个表(具有新项目的表:TabellaTemp)中更新项目,现在的问题是我必须更新旧的文章,而我必须插入新的!为此,我使用以下查询,第一个查询更新了现有文章,第二个查询插入了新文章,第二个查询确实非常慢,几乎需要20分钟才能插入新文章(超过50万篇文章)!有没有一种方法可以提高此查询在Sql Server上的性能?

我在这里输入表的结构http : //www.sqlfiddle.com/#!6/4f4ea

查询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')
贾亚苏里亚·萨泰什

将IN语句替换为existing可以带来很大的性能提升

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上的列以提高性能

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章