背景:我正在使用非生产 SQL Server 来操作大型数据集并运行一些基本计算。我拥有的原始数据文件大约有 30M 行,缺少记录(不是 NULL;它们不存在,但由于超出我判断的原因,它们必须存在)。所以我基本上为所有应该在那里的行和列(总共 6 列)创建了一个“shell”表——这个表大约有 80M 行。
问题:我需要帮助的步骤是在 80M 行表的顶部覆盖原始 30M 行。(所有30M行根据三列的值在大表中都有匹配的记录,其余三列当前为空,需要用原始数据覆盖。)
我成功地为更大的数据集(40M/100M 表)完成了这个过程,这个过程大约需要 4 个小时。没关系 - 这是一次性的事情。但是当我在这个较小的数据集上运行它时,它运行了 10 多个小时。我第一次遇到超时错误。我试过调整一些东西并再运行两次,但我在大约 10 个小时后取消了查询,认为我可以尝试其他的东西。
关于为什么它第一次在更大的桌子上工作,而不是在这个较小的桌子上有什么想法?关于如何使代码更高效或清除某个文件中的某些内容的任何想法?
代码:
update [shelltable]
set shelltable.column4 = originaltable.column4,
shelltable.column5 = originaltable.column5,
shelltable.column6 = originaltable.column6
from shelltable left join original table
on shelltable.column1 = originaltable.column1 and
shelltable.column2 = originaltable.column2 and
shelltable.column3 = originaltable.column3;
Run Code Online (Sandbox Code Playgroud)
自从尝试失败以来我尝试过的事情: