gpt4 book ai didi

sql-server - 使用匿名数据更新大型(280M 行)表

转载 作者:行者123 更新时间:2023-12-05 00:06:55 25 4
gpt4 key购买 nike

我们有一个正在迁移到新环境的生产数据库,在项目处于开发阶段时,客户要求对某些列和某些表中的数据进行匿名处理。

供应商提供了替换数据的脚本 - 例如:

UPDATE ThisTable SET Description = 'Anonymised ' + TableKey

现在的问题是有几个表有数百万行。最大的是 284,000,000 行。

当然,由于锁、TempDb 和行版本、日志文件等原因,上述语句永远不会对这样的表起作用。

我有一个我以前用过的脚本,它本质上做了以下事情:

我目前的做法:
1. 创建源表主键的临时表(并在主键上创建索引)。
2. 从临时表中选择前 n 个 PK 并处理源表中的适当行。
3.从临时表中删除前n个PK
4.从步骤2开始重复

这很好用——它提供了合理的性能(并且做了一些能够预测结束时间的指标)。然而,在大表上运行它给出了 4 天的预测运行时间!

我采取的其他措施是将数据库置于简单恢复模式。

我们拥有对服务器的独占访问权,并且可以用它“做我们想做的事”。

核心问题是我们正在谈论大量的行。一种想法是 BCP OUT 到文本文件,离线处理,然后 BCP 输入。但是,我们仍然处理一个包含 284,000,000 行的文本文件!

提问:
那么 - 关于如何实现上述目标的任何其他想法?我是否缺少执行此操作的“简单”方法?

最佳答案

第 1 步用名称 ie tablename+temp 创建相同的表结构

第 2 步现在从 select from tablename 插入到 tablename+temp。

即插入到tablenametemp 从表名中选择列 'Anonymised ' + TableKey 作为描述。

Step 3 将tablename重命名为tablename1,tablename+temp重命名为tablename

Step 4 drop tablename1(验证后)

请注意,如果您有约束创建,也请重命名它们。

关于sql-server - 使用匿名数据更新大型(280M 行)表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38785106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com