2011-07-15 28 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

相關問題