我正在制作一个计算作为所需列之一的报告:
SELECT
....
sum(SFLI.PLANNEDVOLUME) * PTS.KILOGRAMSPERUNIT as [WEIGHT],
FROM
....
GROUP BY
....
我团队的另一位开发人员表示,最好将计算结果移到报告中,而不是将其留在存储过程中,因为它会产生错误的执行计划。我做了一些研究,似乎将计算移动到报告中可能对大型数据集不利。
所以我的问题,是否超级糟糕,将计算留在存储过程中?我很确定SQL Server足够聪明,可以并行执行任务,甚至执行计划都不会那么糟糕。我错了吗?
PS:没有分组,我们谈论的是250k行,分组产生< 250行。
答案 0 :(得分:2)
将计算移动到报告只是意味着SSRS Web服务器将通过代码(C?C ++?)而不是通过db引擎优化器运行它的SQL来完成工作。如果您正在进行大量的字符串操作,那么SSRS可能比SQL更快,但在您的情况下,它看起来像是在进行数值计算,我绝对会让SQL处理,除非有人告诉你,你正在使服务器瘫痪。如果是,您还可以将查询作为每晚批处理过程运行到datamart中。正如@scsimon所说,这实际上取决于每个场景在您的环境中运行的速度,因此您不能依赖于您的同事的经验法则。
就个人而言,我有很多使用相同或类似数据集的报告,因此我更有意义在SQL中进行计算,因为我可以通过更改底层过程来更改所有报告。