报告中的计算与存储过程中的计算

时间:2017-07-13 21:57:06

标签: sql-server tsql stored-procedures reporting-services database-performance

我正在制作一个计算作为所需列之一的报告:

SELECT
   ....
   sum(SFLI.PLANNEDVOLUME) * PTS.KILOGRAMSPERUNIT as [WEIGHT],
FROM
   ....
GROUP BY
   ....

我团队的另一位开发人员表示,最好将计算结果移到报告中,而不是将其留在存储过程中,因为它会产生错误的执行计划。我做了一些研究,似乎将计算移动到报告中可能对大型数据集不利。

所以我的问题,是否超级糟糕,将计算留在存储过程中?我很确定SQL Server足够聪明,可以并行执行任务,甚至执行计划都不会那么糟糕。我错了吗?

PS:没有分组,我们谈论的是250k行,分组产生< 250行。

1 个答案:

答案 0 :(得分:2)

将计算移动到报告只是意味着SSRS Web服务器将通过代码(C?C ++?)而不是通过db引擎优化器运行它的SQL来完成工作。如果您正在进行大量的字符串操作,那么SSRS可能比SQL更快,但在您的情况下,它看起来像是在进行数值计算,我绝对会让SQL处理,除非有人告诉你,你正在使服务器瘫痪。如果是,您还可以将查询作为每晚批处理过程运行到datamart中。正如@scsimon所说,这实际上取决于每个场景在您的环境中运行的速度,因此您不能依赖于您的同事的经验法则。

就个人而言,我有很多使用相同或类似数据集的报告,因此我更有意义在SQL中进行计算,因为我可以通过更改底层过程来更改所有报告。