Stored procedures 哪种方法可以保证更好的性能-一个megaquery还是几个目标查询?

Stored procedures 哪种方法可以保证更好的性能-一个megaquery还是几个目标查询?,stored-procedures,reporting-services,database-performance,query-performance,Stored Procedures,Reporting Services,Database Performance,Query Performance,我正在创建一个SSRS报告,该报告返回多个“单元”的数据,这些单元都将显示在一行上,单元1首先显示在其右侧的单元2数据上,以此类推 我可以使用使用“IN”子句查询数据库的存储过程获取所有这些数据,也可以使用多个目标(“Unit=Bla”)查询 所以我想我可以用“=Unit:[Unit1]”之类的东西过滤每个“Unit”段,或者我可以为每个段分配不同的数据集(使用目标数据) 哪种方式更“高效”——获取一大块数据,然后在不同的位置过滤相同的内容,或者获取目标数据的多个实例/数据集 我的猜测是后者,但

我正在创建一个SSRS报告,该报告返回多个“单元”的数据,这些单元都将显示在一行上,单元1首先显示在其右侧的单元2数据上,以此类推

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

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

哪种方式更“高效”——获取一大块数据,然后在不同的位置过滤相同的内容,或者获取目标数据的多个实例/数据集


我的猜测是后者,但我不知道SSRS是否足够聪明,是否可以通过“幕后”进行一些优化,使前者同样或更好地发挥作用。我认为这实际上取决于大数据块的大小。我的经验是,SSRS可以在从数据库返回后处理大量数据,而且处理速度很快。如果报表最终要聚合数据,我会尽量在数据库端进行聚合。原因是,通常数据库服务器有更多的资源来完成所有这些工作。但是,如果需要详细信息,并且您可以很容易地在报表服务器端进行聚合,那么可以提取10K条记录并对其进行处理

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


如果你在寻找确切的解决方案,这不是一个很好的答案。这要视情况而定。通常,反复试验会让你找到问题报告的答案。

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

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


如果你在寻找确切的解决方案,这不是一个很好的答案。这要视情况而定。通常,尝试和错误会让你对所报告的问题作出回答。

SSR不会做任何“优化”,而且渲染要求听起来很琐碎,所以你应该把它看作SQL查询问题,而不是真正的SSR。

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


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

SSR不会做任何“优化”,并且渲染要求听起来很琐碎,所以您可能应该把它看作SQL查询问题。不完全是SSRS

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


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

否,它肯定需要保持SP;它非常庞大,并且使用临时表、局部变量(如果它们在SQLese中被称为局部变量)等等。我没有编写它,也没有对它进行摸索,因此我无法对它进行太多优化—“就是这样”这听起来像是一种鲁莽的做法——你的报告将受到它使用的任何逻辑的支配,你将被指责为报告作者。祝你好运不,它肯定需要保持一个SP;它非常庞大,并且使用临时表、局部变量(如果它们在SQLese中被称为局部变量)等等。我没有编写它,也没有对它进行摸索,因此我无法对它进行太多优化—“就是这样”这听起来像是一种鲁莽的做法——你的报告将受到它使用的任何逻辑的支配,你将被指责为报告作者。祝你好运