2015-09-27 64 views
-2

我正在提取產品列表,包括他們的價格。我想要獲得價格。哪個查詢已優化?

我寫了兩個類型的查詢:

context.Products.Include("Prices").Where(p=>p.Prices.Where(pr=>pr.Enable==true).Count()>0).ToList(); 

而另一種是:

context.Products.Include("Prices").ToList().RemoveAll(p => p.Prices.Where(pr => pr.Enable == true).ToList().Count == 0); 

哪一個更優化的?

+3

你的分析器告訴你什麼? –

+0

通常,在數據庫端執行更多操作會更快,尤其是如果您擁有正確的索引。 – MasterOfBinary

+0

您的意思是「我怎麼測量哪一個更快?」 – JJJ

回答

2

假設您使用的是EntityFramework上下文,第一種方式會更好。

這是因爲Linq to SQL會將該語句翻譯爲SQL語句。 Where聲明將導致根據SQLWhere。所以只需要檢索元素的必要子集。

第二個語句檢索所有產品和價格,然後刪除不需要的元素。

這假設你有一個遠程數據庫。如果您的數據庫在本地運行,或者您已經將所有產品和價格記錄在內存中,則不太容易知道(您將不得不使用該分析器)。

+0

謝謝先進。我怎樣才能在sql server 2008 R2中使用sql profiler? –

+0

您應該在Visual Studio中使用C#分析器。第二個查詢只選擇所有元素。 – Domysee

0

這種問題真的取決於很多事情,所以說哪個更好,並不那麼容易。

但是從代碼中,第一個是在SQL側,其中第二代碼是從SQL獲取所有數據並做其中應用做的where子句。

所以它將取決於sql server,應用程序硬件和數據量。