【问题标题】:Does sorting the Tablix in the RDL is better than using ORDER BY in stored procedures?在 RDL 中对 Tablix 进行排序是否比在存储过程中使用 ORDER BY 更好?
【发布时间】:2015-02-03 02:05:24
【问题描述】:

尊敬的 stackoverflow 管理员和成员:

大家好,祝大家有个愉快的一天。

我一直在我工作的这家公司开发 RDL(它使用 SQL Server 2008 R2 中的存储过程来获取数据)。我们以前的数据库管理员检查了我的存储过程,并建议我在存储过程需要增强时进行一些更改。一年后,他辞职了。 :-(

这个新的数据库管理员来了,现在他要我修改我所有的存储过程规范。那些使用具有ORDER BY 子句的存储过程的 RDL。 :-(

他说排序必须在报表/RDL 中完成,因为它会以某种方式卸载数据库中的一些开销,从而使我的报表更快地生成数据。

我现在的问题是,他对此是否正确?我可以阅读其他阅读材料来配合他的建议吗?还是他只是建议我从那以后没有练习过的一个简单的经验法则? (正如他所说,在存储过程中没有ORDER BY 子句,也没有格式化(例如日期、时间等),在 RDL 中进行所有格式化和排序。我的更改还有一半,但我想要了解更多关于他继续指导的信息。请提供建议。

谢谢你,给大家更多的力量。 :-)

真正属于你的,

马克·斯夸尔

【问题讨论】:

标签: rdl


【解决方案1】:

正如我所评论的,排序问题归结为在客户端或服务器端进行排序。链接的问题可能会就每个选项提供更深入的讨论,但简而言之,没有明确的答案,每个选项都有取舍,最终您牺牲的内容取决于您的特定用例。

当您提到“RDL”时,我想您指的是 SQL Server Reporting Services,对吧?如果是这样,那么情况就不同了,因为“服务器”和“客户端”实际上是可能在同一台机器上运行的两个不同的程序(如果我错了,请纠正我)。

基本上,正如您的 DBA 所说,在服务器中执行此操作(即ORDER BY),数据库引擎实际上可以完成更多工作。好消息是 SQL 可能有更多的工具来提供比客户端更快的响应(索引、统计信息、可能更快的 CPU 等),对于分页和TOP 等操作,它几乎总是在数据库中做的更好选择,因为客户端需要获取更多数据才能提供结果。

排序客户端具有分布式排序的优势。当许多客户端一起使用数据库时,让它们进行排序可以减轻服务器上的 CPU 压力(这很可能是您的 DBA 推理背后的原因)。它还使客户端能够有效地对用户操作的数据进行重新排序,而无需再次访问服务器(除非涉及分页)。

至于你提到的格式,这里我倾向于同意 DBA。大多数时候,格式化在客户端而不是由数据库提供服务更好,因为它在每个地方的显示方式都是特定的。拥有存储过程格式日期等意味着将其与该特定报告耦合,这意味着您不能轻松地将其重新用于其他目的。客户端工具通常更擅长为最终用户显示内容,甚至可以考虑本地化(小数位、日期格式排序、填充等)等内容,虽然可以在服务器中完成,但通常涉及更多工作,甚至复制格式化功能。

【讨论】:

  • 感谢您提供的链接。根据我所读到的,关于在服务器或报告上排序的意见 (是的,我指的是 SQL Server Reporting Services,谢谢先生) 因人而异,正如您所说,每个都有权衡。至少我知道,不知何故,有人会(仍然)同意我在存储过程中排序是可以的。 :-) 但是既然他说这样更好,那么我应该对我所有的存储过程进行所有需要的更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多