假设
数据库中有大约一百万个项目和一个存储过程
返回所有商品。
在不更改存储过程的情况下,返回单个项目的最有效条件是什么?
尝试:
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();
答案 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
字段具有索引,那么第二个查询将更有效
毫无疑问,更好的选择是,这将发生在数据库而不是内存......但如果不能改变..