gpt4 book ai didi

mysql - 按正确顺序删除/更新/插入数据 MSSQL -> MySQL

转载 作者:行者123 更新时间:2023-11-29 10:50:52 26 4
gpt4 key购买 nike

我目前的问题如下:

我有表A,它根据表A上是否发生更新、插入或删除事务将项目复制到传输表,即

A -> 新插入

触发器激活行并将行插入到带有另外 2 列的传输表中 - DateQueriedQueryType(其中 DateQueried 是触发器触发的日期, QueryType 为“删除”、“插入”或“更新”,具体取决于触发器类型)

但是,现在我需要通过链接表将此数据传输到 Web 服务器(所有这些都很好并且按其应有的方式进行)。目前我有一个 PowerShell 脚本来执行此操作。该脚本执行以下操作:

  • 从我的传输表中选择所有值,按日期查询排序
  • 运行一个 foreach 循环,该循环运行一个存储过程,以根据 QueryType 的值将该值插入/更新/删除到网络服务器。

此方法非常慢,脚本在 30 分钟的计时器上运行,我们可能会遇到这样的情况:在 30 分钟的时间范围内收到超过 100,000 行,这意味着通过 PowerShell 脚本与数据库有 100,000 个连接(特别是当有 15 个表需要运行此过程)。

是否有更好的方法通过运行内部联接来获取这些值?以前,我只是通过一个存储过程一次运行整个表,该存储过程将使用 QueryType 删除从第二个服务器中删除所有值,然后运行插入,然后更新。但是,如果一个人要创建一个新作业,然后删除该作业,然后重新创建该作业,然后更新该作业,然后再次删除该作业,则会出现一些问题。我的存储过程将处理所有删除,然后处理所有插入,然后处理所有更新,因此即使该行被删除,它也会再次将其插入。

然后,我再次重新调整它,而是只传输主键,每当我运行存储过程时,它都会根据主键处理删除,然后对于插入和更新,它会首先连接到主键上的原始表(如果之前被删除,则不会返回任何结果,因此不会插入)。但我遇到了一个问题,即查询消耗了太多的进程资源,并且有时会破坏服务器(它必须尝试将超过 100,000 个结果连接到具有超过 1000 万行的表)。另外还有另一个问题,即它会为连接不起作用的每列插入仅包含空值的行。然后当它再次发生时,就会出现主键错误,并且存储过程将停止。

是否有另一个我忽略的选项可以使这里的过程更快,或者我只是受到服务器上的限制,也许不得不建议该公司只在每天结束时处理上传,而不是处理上传他们想要什么 30 分钟的时间表?

最佳答案

坚持批量删除/插入/更新订单。

但是:

  • 仅插入稍后删除不存在的行(所有无论如何,更改都会丢失)
  • 仅处理不存在稍后插入或删除行的更新(所有更改将被覆盖)

关于mysql - 按正确顺序删除/更新/插入数据 MSSQL -> MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43751164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com