Sql server 更新查询在SQL Server中挂起

Sql server 更新查询在SQL Server中挂起,sql-server,sql-update,Sql Server,Sql Update,我处于报表开发和报表的主数据集使用存储过程填充之间。下面给出了一个特定的update语句 UPDATE T1 SET T1.Status=T2.Status, T1.ErrorMessage=T2.ErrorMessage, T1.IssueStatus=T2.IssueStatus FROM #tmptblOtherSongs T1 INNER JOIN #tmpOtherSongStatus T2 ON T1.SongCode= T2.SongCod

我处于报表开发和报表的主数据集使用存储过程填充之间。下面给出了一个特定的update语句

UPDATE T1 
SET 
  T1.Status=T2.Status, 
  T1.ErrorMessage=T2.ErrorMessage, 
  T1.IssueStatus=T2.IssueStatus
FROM 
  #tmptblOtherSongs T1 
  INNER JOIN #tmpOtherSongStatus T2 ON 
    T1.SongCode= T2.SongCode AND 
    T1.SocietyCode= T2.SocietyCode AND 
    T1.TableName=T2.TableName 
WHERE  
  T1.SessionID='TRYFBGHk' AND 
  T2.Status IS NOT NULL
sp到达此特定更新查询时将进入挂起状态。我试着单独运行这个查询,但结果是一样的。对于少量的数据,它运行得很好,就像在数千个数据中一样,但是对于更多的数据,问题就出现了。
我有什么办法可以防止这种情况发生吗。我不知道为什么会发生这种情况。

当进程处于挂起状态时,它正在等待某些东西。通常,它要么等待I/O(读取或写入数据,也可能与tempdb相关),要么等待阻塞结束

如果没有阻塞,很可能是I/O操作。如果有不正确的地方,您应该查看执行计划和/或设置统计io,并检查哪些表导致了大部分I/O


I/O通常可以通过添加索引来改进,在您的情况下,我将开始研究T1.SessionID,然后再研究T1&T2.SongCode和SocietyCode+可能是TableName,具体取决于每个值在表中的行数。

向表中添加索引以加速此查询可能会解决问题。感谢JamesZ。。但添加索引会不会减慢更新过程?@Geethu只有在您将索引添加到实际正在更新的字段(在本例中为Status、ErrorMessage和IssueStatus)时才会这样做