代码之家  ›  专栏  ›  技术社区  ›  Jay

在循环内还是循环外提交更好?

  •  4
  • Jay  · 技术社区  · 14 年前

    让我想起的是,我有一个这样的程序,我最近从一个大的提交切换到一堆小的提交,因为它是一个相当长的运行程序——大约80分钟——它在坏数据上失败了一半。我修复了问题并重新运行,但之后它必须从头开始重新运行,因为我可以让它只处理以前未处理的记录。

    当我做这个改变时,我注意到无论哪种方式,运行时间都差不多。

    3 回复  |  直到 14 年前
        1
  •  6
  •   KeithS    14 年前

    假设不需要回滚整个持久性(在这种情况下,只有一个答案;commit outside),那么在循环内提交将使事务日志更小,但需要更多到数据库的往返。在循环外提交正好相反。哪个更快取决于平均操作计数和总体提交的数据量。对于持续大约10-20条记录的例程,请在循环外提交。对于1-2百万条记录,我会分批提交。

        2
  •  1
  •   HLGEM    14 年前

        3
  •  0
  •   Oded    14 年前

    在性能方面,通常最好在最后进行一次大的提交(让网络通信量,通常对数据库的工作更少)。

    当然,这取决于许多因素,如表上的索引、数据量等。

    你的决定应该由什么驱动 每个 更新是-它本身应该是一个事务吗?很多项目的更新有意义吗?如果循环中途失败怎么办?

    回答这些问题将为您在该流程的应用程序中执行此操作提供正确的方法-根据应用程序上下文,您可能会找到不同的方法来处理提交。