2011-03-06 36 views
0

甲後續問題有關DAL層部分..第一個問題有關dealing with large objectsSQL:從一個查詢中的多個表中進行選擇還是針對每個表的查詢進行選擇?

我有一個表(PlacesTable)由像其他6個表連接(1:許多和許多:許多關係)

在我的DAL中,我應該加入一個大的查詢,加入6個表格+ m:m參考表格(它產生多個數據,我不需要Please refer to my old question)並將所有數據放在它的特定對象屬性中,或者,如果我爲每個表使用單個查詢併爲每個獲取的表創建一個對象......並最終將這些發送到UI?

如果我不夠清楚,請告訴我您需要了解的更多信息!

預先感謝您的時間和幫助=)

回答

0

你是用一個單一的查詢返回所有的UI所需的信息更好。

每個數據庫連接都會很慢,您必須等待所有數據庫連接完成後才能爲UI準備好數據。

應用程序和SQL服務器之間最慢的事情是建立連接的行爲 - 它們越少越好。

+0

@Oded。但是這種查詢的大小充滿了連接,再加上它會返回重複的行,所以它會獲取大量數據以及大量代碼來刪除重複項。你可以請參考這個問題http://stackoverflow.com/questions/4391933/complicated-database-manipulation所以你可以得到整個圖片! – lKashef 2011-03-06 20:33:47

+0

@IKashef - 我已經讀過這個問題了。除非您使用表格方式更多地討論兆字節數據,否則最好一次性返回所有數據。 – Oded 2011-03-06 20:36:10

+0

@Oded。謝謝=)..只是爲了使一切都清楚,所以所有的連接和重複,並添加額外的類和方法以及大量的循環和條件檢查來消除重複是值得的嗎? – lKashef 2011-03-06 20:40:39

0

通常,數據庫在連接來自多個表的數據方面比其他技術更好。如果您進行一個查詢,您將獲得更好的性能,而不是進行多個查詢。您還將獲得無需在表格和對象之間建立一對一關係的額外好處。

+0

如果是關於連接,也許我可以批量查詢我的數據庫並在一個連接中運行所有查詢,但是如果您可以參考我對Ode​​d的答案的評論,您將理解我的情況下單個查詢的一些其他不利方面。 「你還可以獲得額外的好處,不必在你的表格和對象之間建立一對一的關係。」請你澄清一下這句話! =) – lKashef 2011-03-06 20:36:46

1

你的問題似乎是關於你是否應該將相關實體加載到你的Places對象中。這聽起來像你在你的模型中有幾個類,這是一個很好的開始。

僅加載您需要的數據。考慮你的消費者(在這種情況下,用戶界面)。你需要顯示這些數據嗎?只查詢您需要的數據。在您的DAL中構建多個方法,以確保正確加載數據。即GetPlacesSummary()以單向方式返回數據,而GetDetailedPlaces()返回更精細的數據集。

調查數據訪問組件,支持延遲加載。這意味着只有當您訪問這些屬性(如Customer.Invoices.Count)時纔會從數據庫中實際查詢數據。

+0

你的答案符合我原來的問題,這是很好..但我的問題是,如果我已經決定一次加載信息..我應該檢索它使用單個查詢,加入我所有的表或使用單個查詢每個表都將以相同的方法運行,最後它們將填充Places對象(注意:這些地方是一個包含我的其他實體的多個List 的對象,評論,所有者的信息,圖片(僅路徑),實際上我的大關注是業主的信息對象,它將有一個列表財產!!) – lKashef 2011-03-06 20:46:26

2

如果一個大的查詢提供了太多的重複數據,和6個往返慢......一些選項

  • 使用存儲過程在一個數據庫調用
  • 返回記錄集6做一些連接上服務器同時減少重複的數據和的往返
    • 一舉兩得

你有任何性能差異嗎?或者這是猜測驅動的優化?

+0

實際上這是一個猜測驅動,我想看到更廣泛的經驗的人的意見阻止我,如果我走錯了路! – lKashef 2011-03-06 20:52:47

+0

btw你是什麼意思的加入服務器! – lKashef 2011-03-06 20:55:58

+0

@lkashef:在* SQL *服務器中加入,而不是在您的客戶端代碼 – gbn 2011-03-07 05:31:45

相關問題