【发布时间】:2016-10-13 02:19:19
【问题描述】:
假设
数据库中有大约一百万个项目和一个存储过程
返回所有项目。
在不改变存储过程的情况下,返回单个项目的最有效的where条件是什么?
尝试:
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();
【问题讨论】:
-
@DavidL 那时数据在内存中,因此数据库索引不相关。
-
@DavidL:这两种方式都不使用索引。过滤器应用于存储过程的输出。
-
那么您有一个返回百万项的存储过程?我会专注于这一点,而不是如何让你的 where 更高效
-
@Servy:我不会做出这样的假设。
db表示一个 EF 实例,它很可能是一个IQueryable -
@RobertHarvey:这不是假设。 OP 说这是一个“存储过程”。