首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在实体框架6.0中改进此查询?

如何在实体框架6.0中改进此查询?
EN

Stack Overflow用户
提问于 2015-10-16 15:21:23
回答 1查看 99关注 0票数 1

有人能告诉我这个问题出了什么问题吗?如何提高性能,减少执行时间?

代码语言:javascript
复制
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分析器,它警告我如下:

  1. 对未索引列的查询
  2. 柱型失配
  3. 每个请求不止一个会话

FYI:

  • EmailAddress - varchar(50) - Non
  • 密码-varchar(最大)-无索引
  • IsAccountVerified - bool -无索引

即使在当地,我也注意到执行要花2-4秒?

除此之外,是否有人可以建议imp准则来微调EF中的查询。

我正在使用EF6.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-16 16:10:19

我认为问题在于您使用的是不必要的复杂查询,因为EmailAddress可能是唯一的。现在,您正在检查三个条件来选择您的记录,但只使用电子邮件地址应该是公平的。我更愿意基于EmailAddress (可能是IsAccountVerified)选择用户,然后在代码中检查密码哈希。

代码应该是这样的(我还没有检查它):

代码语言:javascript
复制
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 )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33174059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档