读书人

全表Update语句执行议案

发布时间: 2014-01-19 01:28:51 作者: rapoo

全表Update语句执行方案
产品表结构如下:

ID 列2 列3 等

A2012030901000001

现增加2列截取ID 中的年份和产品类型作为查询使用分别是编号ID的如下:
ID Year Type

A2012030901000001 2012 01
脚本:
update 产品表 set Year=substring([ID],(2),(4)),Type=substring([ID],(10),(2))
问题有以下2个:
1\表中数据超过2000万条,请问这种全表update对Year和Type创建索引是否有用,有没有其他更快效率的执行方式?
2\如果执行长时间未完成,为避免锁表如何执行能及时的立刻回滚?
[解决办法]
全表更新:
步骤1:select 不需要更改的字段,需要更改的字段 as 新字段 into #t
from 源表

步骤2:truncate table 源表
步骤3:insert into 源表 select * from #t
[解决办法]

引用:
产品表结构如下:

ID 列2 列3 等

A2012030901000001

现增加2列截取ID 中的年份和产品类型作为查询使用分别是编号ID的如下:
ID Year Type

A2012030901000001 2012 01
脚本:
update 产品表 set Year=substring([ID],(2),(4)),Type=substring([ID],(10),(2))
问题有以下2个:
1\表中数据超过2000万条,请问这种全表update对Year和Type创建索引是否有用,有没有其他更快效率的执行方式?
2\如果执行长时间未完成,为避免锁表如何执行能及时的立刻回滚?



有分区的话,分区split 出去,然后更新,更新后switch回来。

没有分区的话,都是全表扫一遍,没索引啥事儿。

个人建议,分批次处理,比如一次50W行,OK了再继续。

读书人网 >SQL Server

热点推荐