首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

全表Update语句执行议案

2014-01-19 
全表Update语句执行方案产品表结构如下:ID列2列3 等A2012030901000001现增加2列截取ID 中的年份和产品类型

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

热点排行