我需要更新单个表中的 1 亿条记录,实际上,通过用简单的 ID 替换列的 varchar 值来规范化表。(我说的是“替换”,但实际上我是将 ID 写入另一列。)
我想要实现的是规范化数据集。尚未标准化的数据没有索引。我的想法是我不会在原始值上构建索引,而是等待,而是索引将在更新完成后用 tinyint 值替换 varchar 值的外键。
UPDATE A
SET A.AutoClassID = B.AutoClassID
FROM AutoDataImportStaging.dbo.Automobile as A
JOIN AutoData.dbo.AutoClass as B on (A.AutoClassName = B.AutoClassName)
Run Code Online (Sandbox Code Playgroud)
背景
执行期间的资源
我怀疑一些事情,比如我需要原始数据的索引,即使我会在规范化更新后删除列 (AutoClassName)。我还想知道我是否应该一次循环一条记录而不是 JOIN,这在我开始时看起来很荒谬,但现在看来会更快。
我应该如何更快地更改剩余标准化更新(类似于此更新)的方法?
我有一个非常慢的 SSIS 包。处理一个文件相当快,处理 100 个或更少的文件相当快。(每个文件大约一秒)
但是,如果我的目录有数千个(非常小的)文件,则该过程会非常缓慢地拖延。我的偏好是仅在工作时间之后运行此过程,但等到那时,要导入的平面文件数量将达到数千个。
包非常简单:
这就对了。
数千个文件的性能每个文件运行 15 秒或更长时间。UI(状态)的绘制/滚动速度非常慢,我什至看不到它的位置 - 在 18 小时前开始的执行中,标记时间超过 15 小时。
版本:MSSQL 2012