加入收藏 | 设为首页 | 会员中心 | 我要投稿 上海站长网 (https://www.021zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

关于sql:同步表-UPDATE INSERT DELETE的顺序重要吗?

发布时间:2022-12-03 15:02:57 所属栏目:MsSql教程 来源:未知
导读: 我需要每天在两个数据库之间同步表,源是MSSQL 2008,目标是MSSQL2005。如果我使用UPDATE,INSERT和DELETE语句(即,已更改的UPDATE行,INSERT新行,DELETE行不再存在), 如果我先执行DELET

我需要每天在两个数据库之间同步表,源是MSSQL 2008,目标是MSSQL2005。如果我使用UPDATE,INSERT和DELETE语句(即,已更改的UPDATE行,INSERT新行,DELETE行不再存在), 如果我先执行DELETE语句,性能会有改善吗? 即,这样UPDATE语句就不会查看不需要更新的行,因为它们将被删除。

这是我需要考虑的其他事项。 这些表具有1-3百万以上的行,并且由于事务量和业务需求的原因,源DB需要保持联机状态,并且查询需要尽可能高效。 该作业将每天在目标数据库上的SQL Server代理作业中运行。 最重要的是,我是一名DB新秀!

感谢StackOverflow社区mssql复制表,您真棒!

我会说,首先您要执行delete,然后执行update然后是insert,因此您不必更新将被删除的行,也不会更新刚刚插入的行。

但是实际上,您是否看到过SQL Server合并语法?它可以为您节省大量代码。

更新我尚未针对INSERT / UPDATE / DELETE检查MERGE语句的性能,这是Aaron Bertrand提供的相关链接,以获取更多详细信息。

经验法则:DELETE,然后是UPDATE,然后是INSERT。

除了性能之外,我主要关心的是在以下情况下避免任何潜在的死锁:

更新您将立即删除的内容。插入某些内容后,您可能会立即尝试更新。

如果仅修改必要内容并正确使用交易,则可以使用任何顺序。

附言 有人建议使用MERGE-我已经尝试过几次了,我的首选是永远不要使用它。

我认为Roman的答案就是您当前所要寻找的内容:DELETE,UPDATE,INSERT(或MERGE)。

现在,还有其他可能的路线可以使事情变得更快,但过程却大不相同:

1.考虑将所有订单保存在您偶尔会针对目标运行的文件中

假定两个数据库完全相同,对于修改2008数据库的每个SQL顺序,请将该顺序保存在.sql文件中,稍后对2005数据库执行该文件。您必须在写入文件时考虑锁定文件,并且可能会有某种冗余。但是,这意味着在2005数据库上进行工作时根本不需要访问2008数据库。换句话说,2008数据库速度没有任何副作用。

陷阱:您可能会错过声明,目的地将不完全相同...

2.正在进行的复制

我对MSSQL的了解不足,不足以告诉您进行自动复制的好工具(请参阅此处:),但是我敢打赌,您可以找到一个好的工具。 MySQL()和PostgreSQL()都具有此类工具,并且这些工具都是免费的。

这就是我会选择的解决方案。根据您使用的工具,它实际上可以进行非常好的优化,这意味着对实时系统的影响将降至最低,并且2005年的副本将在几秒钟内保持最新状态(取决于是否是长距离远程连接,工作量,每个服务器的设置,Internet连接等)

显而易见的陷阱是,它在数据库上添加了一个正在进行的过程,但是,如果您发现一个像PostgreSQL的流复制一样工作的MSSQL工具,它将利用日志的副本,这意味着它死得很快(无需大量使用)。磁盘I / O。)

3.集群数据库(如Cassandra)

这将涉及数据库的更改,我完全确定您还没有准备好进行操作(特别是因为大多数这些系统都不提供SQL),但是我认为在您所处的情况下谈论是一件好事。

像Cassandra()这样的系统会在许多计算机上自动复制其数据。实际上,可以将其设置为在每台计算机发生故障(计算机发生故障)的情况下以冗余方式复制每台计算机100%或X%的所有数据。这可以减轻对单独计算机上特定副本的需求,因为只需向系统中添加几个节点即可提高性能。 (一台计算机不到1,000美元,这是值得的!坦率地说,您可以以5万美元或更少的成本创建一个Peta Byte系统,最终比任何SQL数据库都要快得多……)

主要问题是这些群集的使用与SQL完全不同。但这对于拥有大型数据库的大型企业来说可能是一个解决方案,这些大型数据库需要非常快,并且他们不想在小型计算机上进行投资(例如Cobol和25万美元的计算机,它们在几毫秒内管理着1亿行。 )

使用Cassandra,您可以在不影响前端系统的后端计算机上运行非常繁重的批处理过程!

(编辑:上海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!