将大型sql脚本分成较小批量是否有好处?

时间:2016-11-18 19:38:20

标签: sql sql-server database tsql

我正在研究推出500行的大型和粗糙的sql脚本。目前它的组织方式大致如此。

-- Declare and set a couple of dozen variables that will be used in the script
-- Do lots of deletes, inserts, and updates

目前,这一切都是在一批中完成的。原因是许多操作依赖于公共变量,而变量不会跨越GO边界。将这样的脚本分成更小的批次是否有好处,即使它意味着在每批中重新声明并重新设置一些变量?

-- Declare a few variables
-- Run the delete, update, and insert operations that rely on those variables
-- GO

-- Declare a few variables, some new and some the same as from the previous batch
-- Run the delete, update, and insert operations...
-- GO

-- Rinse and repeat about a dozen times

获取变量的值很便宜,通常将它们设置为文字或selecting的结果只有10行的表。

每个删除,更新和插入操作都在大约100万到500万行的集合上运行。

是否存在理论记忆,存储(用于日志文件)和/或性能改进,这可以通过将其分成多个批次而获得,并且会超过重新声明和重新设置某些批次的丑陋和烦恼变量多次?

在这种情况下,有哪些资源可以了解有关批次的更多信息?我知道有些情况需要批处理,例如在操作新表/列之前创建或更新表。 this问题的答案表明,使用较小批次时,日志文件的大小可能会有一些好处。我无法找到的是关于使用较小批次的可能方案和性能优势的确切信息来源。

由于

2 个答案:

答案 0 :(得分:1)

是的,你应该。将其拆分为逻辑块。

例如:

 exec base_data
     can call exec base_data_address
     can call exec base_data_name
     can call exec base_data_date
  • 易于阅读。
  • 易于维护和调试。
  • 易于重复使用参数的程序。
  • 易于控制交易流程。
  • 易于处理错误。
  • 轻松添加新区块。

如果你必须发送很多变量,似乎有些不对劲。缩短代码使用视图,函数。

答案 1 :(得分:0)

可读性: - 当然,最好将它们分成几个易于理解的小查询,并有助于维护。

效果: - 它有所不同,您必须查看执行计划以确保这一点。 SQL Server并行性已经很好地将查询分解为多线程搜索,但是你至少给SQL提供了一个更好的查询计划机会。

我总是通过分解查询获得的一件事是,如果查询非常庞大并且在分解时运行良好,我就不会收到事务日志错误。