2011-07-15 27 views
2

我正在开发一个应用程序,使用c#和sql server 2008自动化一个体育俱乐部,我差不多完成了。 现在我通过在sql server中创建存储过程来创建报告,该过程在传递一些参数之后返回数据来自c#app,并且报告的结果(如分组),返回的字段数根据发送的参数而改变。 我的问题是最好在sql服务器中进行分组,并返回最后的结果,并在c#报告中显示它,或者在没有分组或排序的情况下获取数据,并在c#报告中完成,您可以在c#报告中创建组并选择哪些字段分组由根据服务器或客户端的数据进行分组会更好吗?

在此先感谢。

+0

我会实现两者并比较性能结果。这实际上取决于服务器生成分组需要多长时间,而不是简单地请求数据和客户端进行分组。 –

+0

为什么我不能接受两个答案?我看到很多人都这样做 我的意思是机器人答案埃里克和贾斯汀是正确的,并帮助 我能做些什么? – AlaaL

回答

4

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

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

否则,在服务器上执行它,因为这会减少带宽消耗,在传输时间方面更快,而且通常更快,因为SQL(和通用数据库)分组速度远远快于您在C#中执行的操作。

这里有感兴趣的链接:

+0

谢谢贾斯汀真的帮助。 – AlaaL

+0

而我正在使用实体框架和LINQ,但报告有很多选项,它是来自4个以上表格的查询数据。我认为这对于实体框架和LINQ来说并不容易吗? – AlaaL

+0

您可能必须在您的C#代码中使用一些“if”条件来处理所有选项,这意味着您可能必须为每个if语句重复一次您的查询。您希望条件尽可能集中在客户端。 –

3

有几个相互竞争的因素:

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

对于一个体育俱乐部应用程序,我强烈怀疑你不会过度负担你的SQL服务器。如果是这样的话,我会在SQL服务器上进行分组。

+0

谢谢Eric真的帮了我。 – AlaaL

相关问题