哪种方法可以保证更好的性能——一个 megaquery 还是几个有针对性的查询?

Which approach promises better performance - a megaquery or several targeted queries?

我正在创建一个 SSRS 报告,其中有几个 "Units" 的 returns 数据,它们都将显示在一行中,第 1 单元在前面,右边是第 2 单元数据,等等。

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

所以我想我可以用“=UNIT:[Unit1]”之类的东西过滤每个 "Unit" 段,或者我可以为每个段分配不同的数据集(带有目标数据)。

哪种方式会更好 "performant" - 获取大量数据,然后在不同位置过滤相同的内容,或者获取多个 instances/datasets 目标数据?

我猜是后者,但我不知道 SSRS 是否足够聪明,可以通过一些优化使前一种方法同样或更好地工作 "behind the scenes"

我认为这真的取决于大数据块有多大。我的经验是,SSRS 从数据库返回后可以处理大量数据,而且速度很快。如果报告最终要聚合数据,我会尽可能多地在数据库端做这些。原因是,通常数据库服务器有更多的资源来完成所有这些工作。但是,如果需要详细信息,并且您可以很容易地在报表服务器端聚合,请提取 10K 条记录并完成它。

我倾向于尽可能少地访问数据库,但有时通过单个查询获取我需要的数据才有意义。我已经用 20 多个数据集构建了报告,每个数据集都用于非常具体的度量,但并没有很好地结合起来。像这样分解它使报告 运行 的时间从 3 分钟减少到 20 秒。

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

SSRS 不会执行任何操作 "optimizing" 并且渲染要求听起来微不足道,因此您可能应该将此视为 SQL 查询问题,而不是真正的 SSRS。

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

另一个好处是,您需要维护的代码将减少 N 倍(其中 N = 单元数),并且可以保证 code/logic 跨单元的一致性。