我有一张表中有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脚本正如我现在所做的那样?
谢谢
答案 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
列。