2010-09-24 78 views
1

今天的快速問題......什麼是更高效的方法,並且它們在SQL Server操作之間的性能有很大的差異。從數據庫中檢索多個對象的有效方法

  1. 四個單獨的選擇查詢(只是id獲取他們)在一個單一的交易,或

  2. 選擇數據庫四個對象在一個查詢中選擇它(ofcourse更復雜,聯接)。

我會告訴你,我寧願喜歡第一個解決方案,但我需要知道它是否效率低得多(如果效率不高)。

感謝您的任何意見..

+0

你有沒有想過使用ORM? – 2010-09-24 15:36:48

+0

我們可能需要查看更多詳細信息,但通常,單個查詢應該會導致讀取操作的數量少於四個獨立查詢。 – 2010-09-24 15:39:12

+0

我使用bltoolkit作爲我的ORM ...它非常輕量級,接近純SQL ...這就是爲什麼我避免在我的問題 – 2010-09-24 15:43:04

回答

2

通常情況下,多個查詢效率較低,因爲有可能是一個網絡往返和其他一些開銷,每個。您可以做的最有效的方式是以最少數量的查詢檢索所需的數據。

另一方面,如果您使用批處理,則可以在一次數據庫往返中執行多個查詢,這可能與訪問單個查詢中的對象大致相同。

如果你只加載幾個對象,那沒什麼關係。業務邏輯的可維護性(這很可能取決於您選擇的解決方案)更重要。

聯接和構建對象的複雜性可以通過ORM完成。你不必自己實現這樣的事情。使用NHibernate,您可以使用複雜查詢或通過id查找單個實例。而且 - 它還支持ADO.NET的批處理和其他一些重要的性能改進。

+0

好吧...和批次你的意思是交易或其不同的故事?另一件事......我應該關心的是,如果這些查詢將會是所有甚至更少的10%...... – 2010-09-24 15:46:49

+0

它與交易無關。事務用於隔離並使幾個操作成爲原子。如果不理解事務,就無法編寫可靠的數據庫訪問。批次是一次發送到數據庫引擎的查詢集合。像一個腳本。 – 2010-09-24 21:47:06

+0

如果它簡化了你的代碼,你應該不會太在意性能......除非你確定了一個顯着的性能問題。如果它不會影響你的代碼太多,去優化。 – 2010-09-24 21:51:49

1

你的問題在信息上有點薄...如果對象在同一個表中,他們應該可能在一個查詢中被提取,特別是如果你已經知道他們的ID。

+0

這些是許多表格的對象...例如,我需要獲取一些視圖,不僅是usr,而且還有它的組和地址... – 2010-09-24 15:48:35

1

選項2會更快,因爲它減少了網絡「往返」。提交每個查詢,然後等待服務器編譯查詢計劃並執行該查詢時,將爲您提交的每個查詢重複;如果你能從一個查詢中獲得你想要的信息,它通常會更快。但是,性能方面,如果您查詢數百或數千個非常「廣泛」的記錄,它可能只會引人注目。

相關問題