小编Chr*_*gna的帖子

在 100 毫米记录上使用 JOIN 更新,如何做得更好?(在 T-SQL 中)

我需要更新单个表中的 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)

背景

  • 在 Server 2008 R2 上使用 MSSQL 2008 R2
  • 服务器有 8 GB RAM
  • 服务器有一个 RAID10, 7200 RPM SATA(不太好,我知道,在生产中这只会读取数据而不会写入数据;加上最近的 HD 短缺使得这对成本来说是必要的)
  • 服务器具有双四核至强 CPU
  • 机器没有做其他任何事情(目前专用于开发,只有这个过程)
  • 简单日志记录已打开(? - 但它是否仍然记录以便它可以回滚?)
  • 请注意,查询引用了两个不同的数据库,这是值得的
  • 表中记录更新的“宽度”为 455 字节

执行期间的资源

  • 物理内存已满
  • 磁盘 I/O 已满
  • CPU 几乎不做任何事情(阻塞点是 I/O)
  • 运行时间已经 14 小时,而且还在增加!

我怀疑一些事情,比如我需要原始数据的索引,即使我会在规范化更新后删除列 (AutoClassName)。我还想知道我是否应该一次循环一条记录而不是 JOIN,这在我开始时看起来很荒谬,但现在看来会更快。

我应该如何更快地更改剩余标准化更新(类似于此更新)的方法?

sql-server-2008 sql-server t-sql

11
推荐指数
3
解决办法
4040
查看次数

为什么 SSIS 枚举目录中的许多文件并导入它们很慢?

我有一个非常慢的 SSIS 包。处理一个文件相当快,处理 100 个或更少的文件相当快。(每个文件大约一秒)

但是,如果我的目录有数千个(非常小的)文件,则该过程会非常缓慢地拖延。我的偏好是仅在工作时间之后运行此过程,但等到那时,要导入的平面文件数量将达到数千个。

包非常简单:

  • 外循环是 For Every(文件枚举,将文件路径读入变量)
  • 在里面,只需导入而不对数据进行任何转换

这就对了。

数千个文件的性能每个文件运行 15 秒或更长时间。UI(状态)的绘制/滚动速度非常慢,我什至看不到它的位置 - 在 18 小时前开始的执行中,标记时间超过 15 小时。

版本:MSSQL 2012

sql-server ssis ssis-2012

7
推荐指数
1
解决办法
3565
查看次数

标签 统计

sql-server ×2

sql-server-2008 ×1

ssis ×1

ssis-2012 ×1

t-sql ×1