2017-06-04 1 views
0

Ich habe eine große Tabelle mit 40 Millionen Zeilen in einer Tabelle. Ich muss den gesamten Tisch aktualisieren, weil ich nichts verpassen möchte. Der Update-Befehl wird verwendet, um den Wert aus einer anderen Tabelle abzurufen und um diesen zu verwenden.Cache-SQL-Update für die tägliche Wiederverwendung

Update D 
Set D.Key = S.Key 
from Activity D with (NOLOCK) 
inner Join Account S 
on D.ID = S.ID 
OPTION (HASH JOIN) 

Mit Aktivität D den großen Tisch 40 Millionen und Kontentabelle S eine 1,2 Millionen sein wird, das ist, warum ich die HASH Option Join nehmen.

Anyways Ich muss dieses Update jeden Tag in einem SQL-Task in meinem ETL-Prozess tun, nur wundernd, da nicht viel geändert wird und kein Index vorhanden ist, um in den Prozess in der Tabelle zu beschleunigen. Gibt es eine Möglichkeit, um diesen Prozess überhaupt zu beschleunigen, ob es eine Möglichkeit gibt, dies zu cachen, so dass es nicht jeden Tag das ganze von Grund auf neu machen muss oder würde dies in einem Stored Proc beschleunigen, anstatt nur ein SQL Script zu verwenden wie ich es gerade mache?

Danke

+1

Der offensichtliche Ansatz besteht darin, einen Index auf "Account (ID, Key)" zu setzen. –

+0

Gibt es eine Möglichkeit, das Gegenteil zu tun und einen Index für die Aktivitätstabelle zu haben, um stattdessen einen massiven Leistungsschub zu erhalten. Ich habe nicht erwähnt, aber ich muss das obige Skript für 20 andere Tabellen machen, wobei die Account-Tabelle nur eine davon gegen die Aktivitätstabelle ist. – abs786123

Antwort

0

Ein einfacher Ansatz, dass UPDATE zu vermeiden, könnte einen Trigger auf dbo.Activity Tabelle zu benutzen, also:

CREATE TRIGGER trgIU_Activity_UpdateKey 
ON dbo.Activity 
AFTER INSERT, UPDATE 
AS 
BEGIN 

IF UPDATE(ID) 
BEGIN 
    UPDATE d 
    SET D.Key = S.Key 
    FROM dbo.Activity d INNER JOIN dbo.Account s ON d.ID = s.ID 
    WHERE d.ID IN (SELECT i.ID FROM inserted i) 
END 

END 

Nach jeder INSERT/UPDATE auf Activity Tisch, wenn es irgendwelche Änderungen sind innerhalb dbo.Activity.ID Spalte wird dann aktualisiert die Key Spalte.

Verwandte Themen