在服务器或客户端按数据分组是否更好?

时间:2011-07-15 17:18:29

标签: c# sql-server-2008 report

我正在使用c#和sql server 2008开发一个应用程序,以自动化一个运动俱乐部,我差不多完成了。 现在我通过在sql server中创建存储过程来为我的app做报告,该存储过程在传递一些参数后返回c#app的数据,并且报告的结果如分组,返回的字段数根据发送的参数而改变。 我的问题是更好地在sql server中进行分组并返回最后的结果并在c#report中显示它或者在没有分组或排序的情况下获取数据并在c#报告中执行它你知道在c#报告中你可以创建组并选择哪些字段到

分组

提前致谢。

2 个答案:

答案 0 :(得分:4)

这取决于。如果LINQ是一个选项(意味着您正在使用实体框架或未使用存储过程),那么您可以以编程方式更改C#代码中的group by,同时仍在服务器上执行分组。

如果您无法使用LINQ / Entity模型,但group by可能会动态更改,请在应用程序级别执行分组,以便您可以根据用户参数对数据进行分组,而无需使用十亿个不同的查询选项。

否则,在服务器上执行它,因为这会减少带宽消耗,在传输时间方面更快,并且通常更快,因为SQL(和通用数据库)分组比在C#中执行的速度快得多。 / p>

以下是感兴趣的链接:

答案 1 :(得分:3)

有几个相互竞争的因素:

  • 通过网络传递数据相对较慢(与在存储它的服务器上处理数据相比)。此外,如果从SQL服务器发送过多的数据出站,则可能会使网络接口饱和。 SQL(除其他外)设计为擅长聚合/分组数据。这有利于在SQL Server上进行分组。
  • SQL服务器是最难扩展的层。这有利于最小化该服务器上的处理并将密集处理卸载到其他应用层(Web服务器,应用服务器,客户端应用程序)。另一种方法是使用可以很好地扩展的数据层(NoSQL解决方案)。

对于体育俱乐部应用程序,我强烈怀疑您不会为SQL服务器负担过重。如果是这种情况,我会在SQL服务器上进行分组。