如何改进此查询的性能、提供状态并作为SQL作业运行?



我有两个表,在两个不同的数据库中。我使用其中一个表来更新另一个数据库表中的值。

有超过200,000行需要迭代,并且在Amazon c3上运行需要几个小时。超大实例。

下面是我正在运行的查询,我想知道三件事:

  1. 可以优化这个查询以执行得更快吗?
  2. 我想添加一个计数来获得实际记录的数量updated.How吗?
  3. 我怎么能把它变成一个SQL作业?
DECLARE @id VARCHAR(12) -- unique id
DECLARE @currentval VARCHAR(64) -- current value
DECLARE @newval VARCHAR(64) -- updated value
DECLARE db_cursor1 CURSOR FOR  
SELECT b.[id], a.status, b.[New Status]  
FROM db1.dbo.['account'] as b inner join db2.dbo.accounttemp as a on a.ACCOUNTID = b.[ID]
OPEN db_cursor1   
FETCH NEXT FROM db_cursor1
INTO @id,
@currentval,
@newval
WHILE @@FETCH_STATUS = 0   
BEGIN   
UPDATE db2.dbo.accounttemp 
SET status = @newval
WHERE ACCOUNTID = @id
AND STATUS = @currentval
FETCH NEXT FROM db_cursor1
INTO @id,
@currentval,
@newval   
END   
CLOSE db_cursor1   
DEALLOCATE db_cursor1
  1. 通过查看该过程,您将看到可以使用以下SQL

    完全删除游标

    更新db2.dbo.accounttempSET status = a.状态从db2.dbo。accounttemp在内部连接db2 .dbo。['account'] AS a ON a. id = at.[ACCOUNTID]a.Status = at。地位

  2. 调用以下行返回受更新

    影响的行
    RETURN @@ROWCOUNT
    
  3. 您可以创建一个SQL维护计划来定期运行它

最新更新