日期:2014-05-17  浏览次数:20567 次

全表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了再继续。