2017-09-05 4 views
1

저는 MS SQL을 사용 중이며 작업장을위한 수백 개의 비용 센터에서 수 백만 가지의 활동이 포함 된 테이블을 보유하고 있습니다. 우리는 서로 다른 관리 수준과보고 구조에 따라 데이터를 분석하려고합니다. 따라서 마스터 데이터 테이블의 레코드로 데이터를 업데이트하려고합니다.수백만 건의 레코드 업데이트

지금까지 모든 것이 잘 작동하지만 너무 느립니다. 이것은 지금 제가하는 방법입니다 :

UPDATE [Activity - E].dbo.td_Import 
SET [Sender.Type]    = tmp_CC.[Type], 
    [Sender.Person Responsible] = tmp_CC.[Person Responsible], 
    [Sender.Level1]    = tmp_CC.[Level 1], 
    [Sender.Level2]    = tmp_CC.[Level 2], 
    [Sender.Level3]    = tmp_CC.[Level 3], 
    [Sender.Level4]    = tmp_CC.[Level 4], 
    [Sender.Active]    = tmp_CC.[Active] 

FROM ( SELECT [Cost Center], [Type], [Person Responsible], [Level 1], [Level 2], [Level 3], [Level 4], [Active] 
     FROM [Master Data - E].dbo.md_CostCenter md_CC 
     WHERE (md_CC.[Record Invalid] LIKE '') OR (md_CC.[Record invalid] IS NULL)) tmp_CC 
WHERE ([Sender.CC] LIKE tmp_CC.[Cost Center]) AND ([Sender.Type] IS }NULL) 

비슷한 코드를 다섯 번 실행해야하고 모든 레코드를 업데이트하는 데 약 90 분이 걸립니다. 데이터는 경영진에게 24 시간 내내 제공되어야하므로 데이터를 얻고 모든 정보를 업데이트하고 관리자를위한 개별 보고서를 작성하는 데 약 2 시간의 짧은 창문 만 있습니다 (모든 보고서는 매크로로 약 10 분 소요) .

데이터를 마스터 데이터 테이블에 조인하려고 생각했지만 모든 자습서에서 완전히 손실되었습니다. 내가 얻은 것은 임시 테이블 이었지만 아무 것도 내 활동 테이블 (td_Import)에 저장되지 않았습니다.

초보자를위한 조언이 있으십니까? 많은 감사드립니다.

크리스

+0

이것은 분석 서비스에 대한 직업처럼 들리 겠지만 아마도 하나 이상의 큐브를 만듭니다. – twoleggedhorse

+0

아마도 여기에 뭔가 빠졌지 만 업데이트중인 테이블과 동일한 업데이트 문에서 하위 쿼리와의 관계가 표시되지 않습니다. –

+0

실제로 일부 SQL은 리팩터링 될 수 있지만 지금은 내 전화에 있습니다. 아무도 응답하지 않으면 나중에 도와 드리겠습니다. – twoleggedhorse

답변

0

나는 마침내 결합의 개념을 가지고 있다고 생각합니다.

다음 코드는 110 만 레코드에서 실행 시간이 30 분에서 3 분으로 향상되었습니다. 또한 유효한 코스트 센터 (뷰 [Active Cost Center])의 선택을 줄이기위한 견해를 포함했습니다.

UPDATE [Activity - E].dbo.td_Import 
    SET [Sender.Type]    = md_CC.[Type], 
     [Sender.Person Responsible] = md_CC.[Person Responsible], 
     [Sender.Level1]    = md_CC.[Level 1], 
     [Sender.Level2]    = md_CC.[Level 2], 
     [Sender.Level3]    = md_CC.[Level 3], 
     [Sender.Level4]    = md_CC.[Level 4], 
     [Sender.Active]    = md_CC.[Active] 
    FROM [Activity - E].dbo.td_Import td_Imp 
     LEFT JOIN [Master Data - E].dbo.[Active Cost Centers] md_CC 
     ON td_Imp.[Sender.CC] LIKE md_CC.[Cost Center] 

다른 사람들에게 도움이되기를 바랍니다.

크리스