移动大量数据而不是更新它

时间:2014-02-16 23:36:21

标签: sql sql-server

我有一个大表(大约40M行),其中我有一些0的列,需要为null,因此我们可以更好地键入数据。

我编写了脚本来查看将更新分成10000个记录的块,找到列的出现为零并将它们更新为null。

示例:

update FooTable
set    order_id = case when order_id = 0 then null else order_id end,
       person_id = case when person_id = 0 then null else person_id end 
WHERE  person_id = 0
OR     order_id = 0

这很好用,但它永远都需要。

我认为更好的方法是创建第二个表并将数据插入其中,然后将其重命名为将旧表替换为零的列。

问题是 - 我可以从table1中选择一个插入表2并在进程中清理table1中的数据吗?

2 个答案:

答案 0 :(得分:0)

您通常可以创建一个新的,已清理的表,具体取决于您使用的实际数据库服务器。

难的是,如果数据库中有其他表,则可能会出现外键,索引等问题,这些问题将引用原始表。

制作新的清洁表是否比更新现有表更快,只能通过尝试来解决。

答案 1 :(得分:0)

将要更新的所有记录的pk / clustered键转储到临时表中。然后执行更新加入临时表。这将确保最低的锁定级别和最快的访问。您还可以将标识列添加到临时表,而不是循环执行并批量执行更新。

相关问题