有人能告诉我这个问题出了什么问题吗?如何提高性能,减少执行时间?
IQueryable<Mapper> query = null;
query = (from c in entities.Users
where c.UserEmailAddress == emailAddress
&& c.UserPassword == password
&& c.IsAccountVerified == true
select new Mapper()
{
UserId= c.UserID,
Name = c.UserName
});
custObj = query.ToList<Mapper>().FirstOrDefault();我正在使用EF分析器,它警告我如下:
FYI:
即使在当地,我也注意到执行要花2-4秒?
除此之外,是否有人可以建议imp准则来微调EF中的查询。
我正在使用EF6.0
发布于 2015-10-16 16:10:19
我认为问题在于您使用的是不必要的复杂查询,因为EmailAddress可能是唯一的。现在,您正在检查三个条件来选择您的记录,但只使用电子邮件地址应该是公平的。我更愿意基于EmailAddress (可能是IsAccountVerified)选择用户,然后在代码中检查密码哈希。
代码应该是这样的(我还没有检查它):
var user = entities.Users.FirstOrDefault(u => u.EmailAddress == emailAddress)
Mapper custObj = null;
if(user != null && user.IsAccountVerified && user.Password == password)
custObj = new Mapper
{
UserId = user.UserID,
Name = user.UserName
};现在您不对非索引列进行查询,结果将是相同的。
我在MS数据库上查看了simillar的情况。基于一个使用索引列的条件进行选择可以很好地提高查询效率(在我的例子中,0MS而不是13 my )。
https://stackoverflow.com/questions/33174059
复制相似问题