在哪里执行? SSRS或SQL

时间:2013-02-01 11:53:09

标签: sql sql-server-2008 reporting-services ssrs-2008

当我创建SSRS报告时,我总是面临着“如何以最少的生成时间创建报告”的困境。

通常,生成时间(或演奏时间)分为两个主要部分:

  1. SQL查询。
  2. 报告组件(表达式,组等)。
  3. 如您所知,SSRS中正在执行的一些事情可以在SQL查询中完成,反之亦然。

    例如:

    • 我可以在SQL中使用Group by子句,但在使用带有组定义的表时也可以这样做。
    • 我可以使用Casting来比较SQL中的两个值,也可以直接在表达式中进行比较。

    还有更多......

    我的问题是:

    A。哪个部分(SQL查询或SSRS)花费更多时间(假设可以在SSRS和SQL中执行任务)?

    B。有什么指导方针(如果有的话),我应该根据dillema在哪里执行给定的情况作出决定?

2 个答案:

答案 0 :(得分:5)

与性能问题一样:

  • 不要过早优化。如果SSRS中的某些内容更简单,那么就在那里进行。只有在出现问题时才考虑交易清晰度(可能是将代码移到SQL端)。
  • 测量。使用ExecutionLog2视图可以全面了解瓶颈的位置。做更多的测量和测试,这样你就可以确保花时间提高重要性能。

底线:让代码清晰明确指导解决特定问题的位置,并在性能成为问题时有选择地进行优化。


Eric Lippert写了a nice blog post关于何时以及如何担心性能的问题。上下文是C#,但基本思想也适用于其他情况,例如SSRS / SQL。

顺便说一下,如果你看一下上面提到的ExecutionLog2视图,你会发现实际上你应该知道三个组件中的三个组件:

  1. 数据检索(SQL)
  2. 报告模型(将数据集转换为内部模型)
  3. 渲染(将模型转换为XLS,PDF等)
  4. 了解瓶颈所处的位置是了解如何解决性能问题的关键。


    根据我的经验提出建议:

    根据经验,偏好SQL优于SSRS 如果您担心性能,尤其是聚合。如果需要,还可以考虑调整数据库(索引等)。

    如果我可以通过事实和研究来支持,那么这个经验法则是最好的。唉,我没有。我可以说,根据我自己的经验,大多数情况下,当我的报告将聚合和计算从SSRS移动到SQL时会出现性能问题,这有助于解决此问题。

答案 1 :(得分:1)

重要的是要记住SSRS是智能的,并在您需要之前保存异常。如果您要导出,那么它将提取所有数据。此外,如果您在线查看并且您已展开和折叠行,则在您想要查看它们之前不会执行它们。在该理论上,首选基本SQL。

最好将聚合留给SSRS,因为报告将尝试在Tablix中进行聚合。至于图表,除非你有Tablix,否则最好聚合。

至于简单计算,这应该在SQL中完成,例如比较等。

请记住,SSRS比您更智能 ,并且最简单的SQL使此服务能够最佳地运行,并且此服务主要用于显示。

如果您使用MS SQL服务器作为数据集,那么该服务将以最佳状态运行。