哪种方法可以提供更好的性能 - 一个megaquery或几个有针对性的查询?

时间:2016-06-01 23:33:37

标签: stored-procedures reporting-services database-performance query-performance

我正在创建一个SSRS报告,该报告返回多个"单位"的数据,这些数据全部显示在一行上,第一单元1,右单元2数据等。

我可以使用存储过程来获取所有这些数据,该存储过程使用" IN"来查询数据库。子句,或多个目标(" Unit = Bla")查询。

所以我想我可以过滤每个" Unit"片段与" = UNIT:[Unit1]"或者我可以为每个段分配不同的数据集(与目标数据一起)。

哪种方式会更多"高性能" - 获取大量数据,然后在不同位置过滤相同的内容,或获取目标数据的多个实例/数据集?

我的猜测是后者,但我不知道SSRS是否足够聪明,通过在幕后进行一些优化来实现前一种方法的效果更好或更好

2 个答案:

答案 0 :(得分:1)

我认为这实际上取决于大块数据的大小。我的经验是SSRS在从数据库返回后可以处理大量数据,并且可以快速完成。如果报告最终会聚合数据,我会尝试尽可能多地在数据库端执行此操作。原因,通常数据库服务器有更多的资源来完成所有工作。但是,如果需要详细信息,并且您可以在报表服务器端轻松地进行聚合,请将10K记录拉到其中。

我倾向于尽可能少地访问数据库,但有时只需要通过单个查询获取所需的数据。我已经建立了超过20个数据集的报告,每个数据集都针对非常具体的措施,这些措像这样打破它使报告的运行时间从3分钟到20秒。

如果您正在寻找合适的解决方案,那么这不是一个好的答案。这取决于实际情况。通常,反复试验可以帮助您找到相关报告的答案。

答案 1 :(得分:1)

SSRS不会进行任何“优化”,渲染要求听起来微不足道,所以您应该将其视为SQL查询问题,而不是SSRS。

我希望带有IN子句的单个SELECT会更快,因为它需要更少的数据库文件I / O.不需要SP,您只需编写SELECT语句即可。

另一个好处是,您可以保留N倍的代码来维护(其中N =单位数),并且可以保证跨单位的代码/逻辑的一致性。

相关问题