更新查询永远运行[英] Update Query Runs Forever

问题描述

我在 QA 的 SQL 7 中运行更新查询,它会一直运行.已经
跑了20分钟到现在!查询很简单:更新一个
表中的字段,基于与另一个表的连接.共有
受影响的 1200 行(表中总共 60,000 行).应该
不需要20分钟!此外,使用相同的条件检索 1200 行
是瞬时的.

有人知道发生了什么吗?这是我的 SQL:

更新库存
SET Web = ''评论''
FROM INVTRY INNER JOIN 选项卡状态
ON INVTRY.Status = tabStatus.Status
WHERE INVTRY.Web = ''新''
AND tabStatus.ForWeb = 1
AND INVTRY.PRICE <0
AND Invtry.HoldInit IS NULL

推荐答案

使用表的别名来更新,这样就没有歧义了:

更新清单
SET Web = ''评论''
FROM Invtry AS I
INNER JOIN tabStatus AS S
ON I.Status = S.Status
WHERE I.Web = ''新的''
AND S.ForWeb = 1
AND I.价格 <0
AND I.HoldInit 为空;

另外,您可以按如下方式重写查询,看看是否有任何效果
差异(尽管通常使用 MS SQL 语法进行 UPDATE 和 FROM
更快):

更新清单
SET Web = ''评论''
WHERE Web = ''新的''
AND 价格 <0
AND HoldInit 为空
并且存在(选择 *
FROM tabStatus AS S
WHERE Invtry.Status = S.Status
AND S.ForWeb = 1);

HTH,

Plamen Ratchev
http://www.SQLStudio.com


另外,查找表上由并发查询创建的任何锁.

HTH,

Plamen Ratchev
http://www.SQLStudio.com

今晚我会在用户退出后试试这个.但是,真的,更快还是
不,我原来的查询应该已经运行了,尤其是因为它只是
更新 1200 行.事实上,它运行了几个小时而没有
完成,然后我停止了.

所以肯定有其他事情发生.

此外,这种语法已经存在多年,从未出现过问题.
但它通常在较小的批次上运行,通常少于 100 个项目.
不过,1200并不是一个很大的数字.


"普拉门·拉切夫"<Pl****@SQLStudio.com 在消息中写道
新闻:4p******************************@speakeasy.net ...
使用表的别名来更新,所以没有歧义:

更新清单
SET Web = ''评论''
FROM Invtry AS I
INNER JOIN tabStatus AS S
ON I.Status = S.Status
WHERE I.Web = ''新的''
AND S.ForWeb = 1
AND I.价格 <0
AND I.HoldInit 为空;

另外,您可以按如下方式重写查询,看看是否有任何效果
差异(尽管通常使用 MS SQL 语法进行 UPDATE with
FROM 更快):

更新清单
SET Web = ''评论''
WHERE Web = ''新的''
AND 价格 <0
AND HoldInit 为空
并且存在(选择 *
FROM tabStatus AS S
WHERE Invtry.Status = S.Status
AND S.ForWeb = 1);

HTH,

Plamen Ratchev
http://www.SQLStudio.com


本文地址:https://www.itbaoku.cn/post/1050852.html