哪个查询已优化?
我正在提取产品列表,包括他们的价格。我想要获得价格。哪个查询已优化?
我写了两个类型的查询:
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);
哪一个更优化的?
假设您使用的是EntityFramework
上下文,第一种方式会更好。
这是因为Linq to SQL
会将该语句翻译为SQL
语句。 Where
声明将导致根据SQL
Where
。所以只需要检索元素的必要子集。
第二个语句检索所有产品和价格,然后删除不需要的元素。
这假设你有一个远程数据库。如果您的数据库在本地运行,或者您已经将所有产品和价格记录在内存中,则不太容易知道(您将不得不使用该分析器)。
谢谢先进。我怎样才能在sql server 2008 R2中使用sql profiler? –
您应该在Visual Studio中使用C#分析器。第二个查询只选择所有元素。 – Domysee
这种问题真的取决于很多事情,所以说哪个更好,并不那么容易。
但是从代码中,第一个是在SQL侧,其中第二代码是从SQL获取所有数据并做其中应用做的where子句。
所以它将取决于sql server,应用程序硬件和数据量。
你的分析器告诉你什么? –
通常,在数据库端执行更多操作会更快,尤其是如果您拥有正确的索引。 – MasterOfBinary
您的意思是“我怎么测量哪一个更快?” – JJJ