LINQ:在选择百万分之一单项时最有效的条件

时间:2016-10-12 16:08:54

标签: c# linq

假设
数据库中有大约一百万个项目和一个存储过程 返回所有商品

在不更改存储过程的情况下,返回单个项目的最有效条件是什么?

尝试

var item = db.GetInfo().Where(i => i.url == url).Select(i => i.ID).FirstOrDefault();
var item = db.GetInfo().Where(i => i.ProductType == 5 && i.url == url).Select(i => i.ID).FirstOrDefault();

1 个答案:

答案 0 :(得分:5)

  

最有效的条件是返回单个项目

假设SP“返回所有项目”,如果您想要的只是第一个回答条件的项目,那么只需使用FirstOrDefault。如果存在这样的项目,它将在找到它的那一刻返回。在最坏的情况下,它将在o(n)

var item = db.GetInfo().FirstOrDefault(i => i.url == url)?.ID;
var item = db.GetInfo().FirstOrDefault(i => i.ProductType == 5 && i.url == url)?.ID

两个查询具有相同的o(n)效率 - 如果在数据库中执行,这些字段上的索引的存在会产生影响。例如,如果ProductType字段具有索引,那么第二个查询将更有效

毫无疑问,更好的选择是,这将发生在数据库而不是内存......但如果不能改变..