2017-12-19 18 views
1

를 업데이트하기 위해 SQL Server 쿼리 최적화 문제는 내가 더 오래된 기사를 새롭게 삽입해야한다는 것입니다. 이렇게하려면 아래의 쿼리를 사용합니다. 첫 번째 업데이트는 기존 기사를, 두 번째 것은 새로운 기사를 삽입하고 두 번째 쿼리는 실제로 매우 느립니다. 새 기사를 삽입하는 데 약 20 분이 걸립니다 (기사는 50 만 개가 넘습니다)! SQL Server에서이 쿼리의 성능을 향상시킬 수있는 방법이 있습니까? 내가 테이블의 기사 (<strong>Articolo</strong> 표가 업데이트 될)를 업데이트해야 할 큰 목록을

는 여기 테이블의 구조 입력 : 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

이 IN 문 교체 큰 당을 가져올 수있다. 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) 
     ) 

는 성능을

+0

덕분에 지금은 트랜지스터를 컴퓨터 밖으로 비행하는 것이 그렇게 빨리 너무 빠른을 개선하기 위해 테이블 ​​TabellaTemp에 열을 인덱싱 시도! 보통 나는 항상 사용법을 바꿀 것입니다! 다시 한 번 감사드립니다. – riki