【问题标题】:Stored procedure vs. DTS/SSIS for data inserts in SQL ServerSQL Server 中数据插入的存储过程与 DTS/SSIS
【发布时间】:2011-07-29 18:11:27
【问题描述】:

在存储过程中使用 INSERT INTO 语句,还是使用 DTS/SSIS 数据转换任务,哪种方式向表中插入大量数据更有效和/或被认为是最佳实践?源数据与目标表位于同一 SQL 服务器上。

【问题讨论】:

    标签: sql sql-server database database-design


    【解决方案1】:

    如果您的转换很简单,我建议您这样做;也就是说,如果它们可以很容易地在几个 SELECT 语句中编码,那么带有一些 SELECT INTO 语句的简单存储过程是您的最佳选择。非常高效,需要维护的活动部件更少。

    另一方面,如果您的转换逻辑非常复杂和/或多变,请考虑使用 SSIS。它的存在是为了让您能够建模和维护复杂的多步骤转换。

    祝你好运!

    【讨论】:

      【解决方案2】:

      我认为你必须先问自己一堆问题才能回答这个问题。这是我经历的……

      1. 一次还是重复? 这主要是为了确定我是否需要回答支持和性能问题。如果是一次性转移,只需在您感觉最舒适的地方进行转移,并将源代码存档以备下次转移时使用。
      2. 我店里的其他开发人员使用/最满意的是什么? 在这里,我做了很多 SSIS 的工作,而他们大多只做 SQL(和 VB)。由于我希望他们在我离开时支持它,如果任务不太复杂,我可能会将其构建为 SP。
      3. 这是否会在夜间服务器负载较低或性能调整很重要时运行? 对于白天的东西,我几乎总是会构建存储过程,因为这对我或其他人来说更容易挖掘和调整性能问题。如果性能不是问题,我更有可能使用 SSIS。这并不是因为我认为 INSERT 更快,只是事后更容易调整。

      【讨论】:

      • 所有这些任务都是每天或每月运行的重复/计划任务。其中一些在生产时间运行,另一些在非工作时间运行。我不是很关心其他开发人员,因为我是唯一一个处理这个问题的人,而且我对这两种解决方案都同样满意。性能通常不是一个大问题,因为数据量并不大。现在我在我的数据库中混合了这两种解决方案,我想在那里保持一些一致性,所以我正在寻找最佳实践..
      • 我想说最好的做法是选择一个并坚持下去,这样下一个人就可以找到所有的部分。永远记住,下一个对它是如何完成的一无所知的开发者可能是你明年。
      【解决方案3】:

      我总是使用批量插入。您将需要删除索引并在最后重建它们。

      http://msdn.microsoft.com/en-us/library/ms188365.aspx

      1. ALTER INDEX [indexName] 表禁用

      2. 批量插入

      3. ALTER INDEX [indexName] ON Table REBUILD

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        • 1970-01-01
        相关资源
        最近更新 更多