2017-09-05 6 views
1

Ich verwende MS SQL und habe eine Tabelle mit Millionen von Aktivitäten aus Hunderten von Kostenstellen für Arbeitsaufträge. Wir möchten die Daten nach unseren verschiedenen Führungsebenen und unserer Berichtsstruktur analysieren. Daher versuche ich, die Daten mit den Datensätzen aus der Stammdatentabelle zu aktualisieren.Millionen von Datensätzen aktualisieren

Bis jetzt funktioniert alles gut, aber es ist viel zu langsam. Dies ist, wie ich es im Moment tun:

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) 

Ich habe einen ähnlichen Code fünfmal laufen und es etwa 90 Minuten dauern, um alle Datensätze zu aktualisieren. Da die Daten dem Management rund um die Uhr zur Verfügung gestellt werden sollen, habe ich nur ein kurzes Fenster von ca. zwei Stunden, um die Daten zu erhalten, alle Informationen zu aktualisieren und individuelle Berichte für die Manager zu erstellen (Excel-Bericht, jeder Bericht dauert ca. 10 Minuten) .

Ich dachte darüber nach, die Daten mit der Stammdatentabelle zu verbinden, aber ich verlor in allen Tutorials total. Alles, was ich bekam, war eine temporäre Tabelle, aber nichts war in meiner Aktivitätstabelle (td_Import) gespeichert.

Irgendwelche Tipps für einen Anfänger? Vielen Dank im Voraus.

Chris

+0

Das klingt wie ein Job für Dienstleistungen Analyse, vielleicht auf den Aufbau einer oder Würfel mehr aussehen. – twoleggedhorse

+0

Vielleicht fehlt hier etwas, aber ich sehe nicht die Beziehung zwischen der Tabelle, die Sie aktualisieren, und der Unterabfrage in der gleichen Update-Anweisung. –

+0

Eigentlich können einige Ihrer SQL umgestaltet werden, aber ich bin gerade auf meinem Handy. Wenn niemand geantwortet hat, werde ich Ihnen später helfen. – twoleggedhorse

Antwort

0

Ich glaube, ich habe endlich das Konzept der Join.

Der folgende Code verbesserte die Laufzeit von über 30 Minuten auf 1,1 Millionen Datensätze. Außerdem habe ich eine Ansicht hinzugefügt, um die Auswahl der gültigen Kostenstellen zu reduzieren (Ansicht [Aktive Kostenstellen]).

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] 

Ich hoffe, dass dies für andere hilfreich sein wird.

Chris

Verwandte Themen