SQL Server/SSIS更新太慢

SQL Server/SSIS更新太慢,sql,sql-server-2008,stored-procedures,ssis,Sql,Sql Server 2008,Stored Procedures,Ssis,我有一个sql server 2008表,其中有超过200000个用户,每个用户都有一个唯一的用户ID,但有重复的电子邮件地址 e、 g 用户标识跨越各种sql Server(200820052000)上的各种表。我们希望合并用户-因此我们最终得到一个电子邮件地址和一个选定的用户ID(我已经有了一个选择正确用户ID的过程) 问题是,在SSIS中更新每个用户需要4分钟(使用存储过程扫描表以查找旧的用户ID并更新到我们想要保留的用户ID)。解决这个问题意味着整个过程将需要615天 还有别的方法吗 如

我有一个sql server 2008表,其中有超过200000个用户,每个用户都有一个唯一的用户ID,但有重复的电子邮件地址

e、 g

用户标识跨越各种sql Server(200820052000)上的各种表。我们希望合并用户-因此我们最终得到一个电子邮件地址和一个选定的用户ID(我已经有了一个选择正确用户ID的过程)

问题是,在SSIS中更新每个用户需要4分钟(使用存储过程扫描表以查找旧的用户ID并更新到我们想要保留的用户ID)。解决这个问题意味着整个过程将需要615天

还有别的方法吗

如果您能提供任何帮助或建议,我们将不胜感激!
谢谢

假设您希望最新的ID成为赢家:

update
   TableContainingUserIDs
set
userid = IDTOKeep
from
TableContainingUserIDs
inner join (
    select max(userid) over (partition by email) as IDToKeep, userid as OldUserID
    from
    tbl
) KeeperSet
on KeeperSet.userid = TableContainingUserIDs.userID
如果您有一些其他逻辑来选择赢家ID,请创建一个查询或一个临时表,以该格式存储数据

IDTOKEP旧用户ID

然后用查询/表替换该查询中的KeeperSet别名

然后用userid冲洗并重复每个辅助表

如果您使用的是SSI,而不是存储过程,为什么不使用暂存表,然后一批更新

  • 创建数据流任务。将IDToKeep OldUserID查询/表作为暂存表推送到目标服务器
  • 创建一个executesql任务,并使用staged表作为KeeperSet对目标服务器运行上述查询
  • 完成后放下KeeperSet staged表

  • 存储过程并不慢,问题是在数据流任务结束时逐行运行OLEDB命令完全违背了数据库和集合论的目的。将数据转移到同一数据库,运行一个基于集合的查询,就完成了。

    我认为第一步是创建一个参考数据临时表,例如:

    fromId toId
    -------------
    1234   34567
    1235   34567
    1236   789
    
    等等

    然后将这些数据加载到每个数据库实例中

    然后使用游标依次选择每条记录,并根据游标为每个需要更新的表运行update语句


    然后,该进程将在SQL和同一台计算机中运行。它还可以跨服务器和实例并行运行。

    为什么要使用SSI来运行存储过程?我们需要更详细的信息,了解您在执行清理时实际运行的代码,每个用户需要4分钟。我们选择SSI是因为我们需要在多台服务器上同时运行该进程。我能够同时打开与它们所有的连接。通常,过去从SSI调用存储过程并不缓慢。这是一个完全不同的任务,我已经设定了!这是一个代码段:如果存在(从[DB].dbo.table WHERE UserID=old中选择UserID),则开始更新[DB].dbo.table SET UserID=new WHERE UserID=old END ELSE插入MERGERROR(UserID,Error)值(old,'在[DB].dbo.table]中不存在)混合SSI和存储过程I“我猜你是在一个For-Each循环中这样做的,而你不必这样做。。。。执行此操作时,同一SQL Server上需要的所有数据都是相同的,或者在中央服务器中是否有某种主数据。您需要更详细地解释您的流程,以便我们提供帮助,例如,数据集在哪里,软件包是如何设置的,SP的源代码是什么?除了我的经验之外,我的经验告诉我,最新的id几乎总是最难保存的id(通常是相关记录最少的记录,因此需要比保留旧记录更广泛的更新),这是一个很好的答案。
    fromId toId
    -------------
    1234   34567
    1235   34567
    1236   789