缓存SQL Update以进行日常重用

时间:2017-06-04 12:13:31

标签: sql sql-server

我有一张表中有4000万行的大表。我不得不更新整个表格,因为我不想错过任何内容。更新命令用于从另一个表中获取值并使用它来加入。

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

活动D是40%的大表,账户表S是120万,这就是我接受HASH选项加入的原因。

无论如何,我必须每天在我的ETL过程中的执行SQL任务中进行此更新,只是想知道因为没有太多变化而且没有索引可以加速表中的过程。有没有办法加快这个过程,无论是否有一种方法来缓存这个,所以每个晚上它不必从头开始做整件事,或者将它包装在Stored Proc中加快速度而不仅仅是使用SQL脚本正如我现在所做的那样?

谢谢

1 个答案:

答案 0 :(得分:0)

避免UPDATE的一种简单方法是在dbo.Activity表上使用触发器:

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

在活动表上的每次INSERT / UPDATE之后,如果dbo.Activity.ID列中有任何更改,则会更新Key列。