【问题标题】:MERGE vs DROP Table and Rebuild Indexes in SQL ServerSQL Server 中的 MERGE vs DROP 表和重建索引
【发布时间】:2015-06-20 08:31:57
【问题描述】:

我有一个存在于第三方的数据库的“日志传送”副本。日志传送每 15 分钟运行一次,此时与数据库的所有连接都将被删除。该数据库用于报告目的。

我决定将一些数据从日志传送(只读)数据库中提取到一个每晚刷新的新数据库中。这将允许用户连接到新数据库,而不会因日志传送而失去连接的风险。 (它还允许使用更精细的安全权限,因为只读副本无法编辑)

我可以想到 2 种模式来实现这一点。

  1. 删除表、创建表、创建索引
  2. 使用 MERGE 语句插入/更新/删除记录

我已经使用上面的方法1实现了解决方案,效果很好。

每天删除所有数据对我来说有点沉重。上述方法 1 是否有任何副作用让我转而使用方法 2?

为了提供规模感,我只同步 3 个表,

Table 1 - 38 columns - 13,110 rows
Table 2 - 82 columns - 17,421 rows
Table 3 - 22 columns - 249 rows

生成的数据库约为 1.3 GB。 (里面还有一些其他的表)

我希望得到有关方法 1 和 2 的指导,以及是否还有其他我没有考虑的方法。

【问题讨论】:

  • 您是否研究过事务复制?我没有足够的专业知识来实际提供更多帮助,但它可能是一个值得一看的选择
  • 我没有在这个问题的上下文中对此进行研究,因为日志传送是我们的供应商支持为我们获取数据副本的方法。我假设由于日志传送的副本是只读的,我不能将它用于事务复制。

标签: sql-server tsql stored-procedures log-shipping


【解决方案1】:

TRUNCATEINSERT 会比删除或合并更有效。

【讨论】:

  • 我喜欢这样。我会试一试,并将其与我的 drop/create 进行比较。谢谢! (我将在今天晚些时候重新讨论这个问题,一旦我对此有所了解)。
  • 谢谢。从时钟的角度来看,这两种方法都在约 12 秒内完成。我喜欢 TRUNCATEINSERT INTO 与重建所有索引相比的干净程度。我必须对我的存储过程进行轻微修改,以使用 CTE 而不是#Temp 表来让“INSERT INTO”工作,但清除了障碍后,我现在有了更清晰的代码。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 2010-10-26
  • 2019-01-22
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多