sqlserver大数据量update问题? 200

请问各位大神,我要对sqlserver数据库一个表进行update,数据量大概是200多万,如果直接update,sql如下:UPDATEtable_nameSETsta... 请问各位大神,我要对sqlserver数据库一个表进行update,数据量大概是200多万,如果直接update,sql如下:
UPDATE table_name
SET status = '2'
WHERE status = '1'
AND bill= '001'
执行速度特别慢。所以,我改成循环多次update,sql代码如下:

DECLARE @i INT
SET @i = 1
WHILE @i < 5
BEGIN
UPDATE TOP (100) table_name
SET status = '2'
WHERE status = '1'
AND bill= '001'
SET @i = @i + 1
END

这种情况事务是每循环一次,提交一次,还是所有循环都完成,才提交的?

另外,对于这种批量更新的问题,有没有其他方案,谢谢!
展开
 我来答
吉祥长乐7
2020-03-30 · TA获得超过2875个赞
知道小有建树答主
回答量:5372
采纳率:46%
帮助的人:461万
展开全部
我拿到sql一看是update语句,想都没多想直接加并行,但是加了并行发现子查询根本没有用到并行,而且整体cost没有什么变化。我仔细想了想,这种写法oracle内部是通过单条跟新的方式进行,从p_t中那出一条记录去c_t中匹配,c_t中采用索引扫描,然后再通过rowid访问表取到name。所以优化器计算后,不会对子查询中的c_t应用并行,因为此时并行会采用全表扫描,效率肯定没有索引扫描快。语句和执行计划如下:
update /*+parallel(p_t,4)*/ p_t set name=(select /*+parallel(c_t,4)*/ name from c_t where p_t.id=c_t.id) where p_t.name is null;
mimiba212
2020-03-30 · TA获得超过413个赞
知道小有建树答主
回答量:1504
采纳率:64%
帮助的人:81.6万
展开全部
像你这种批量更新提交比较好,比如一次一万条,然后最好做个日志记录,万一哪里失败了就可以追踪到,然后接着做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式