哪个查询已优化?

问题描述:

我正在提取产品列表,包括他们的价格。我想要获得价格。哪个查询已优化?

我写了两个类型的查询:

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

假设您使用的是EntityFramework上下文,第一种方式会更好。

这是因为Linq to SQL会将该语句翻译为SQL语句。 Where声明将导致根据SQLWhere。所以只需要检索元素的必要子集。

第二个语句检索所有产品和价格,然后删除不需要的元素。

这假设你有一个远程数据库。如果您的数据库在本地运行,或者您已经将所有产品和价格记录在内存中,则不太容易知道(您将不得不使用该分析器)。

+0

谢谢先进。我怎样才能在sql server 2008 R2中使用sql profiler? –

+0

您应该在Visual Studio中使用C#分析器。第二个查询只选择所有元素。 – Domysee

这种问题真的取决于很多事情,所以说哪个更好,并不那么容易。

但是从代码中,第一个是在SQL侧,其中第二代码是从SQL获取所有数据并做其中应用做的where子句。

所以它将取决于sql server,应用程序硬件和数据量。