.NET中的EF效率问题

项目后期遇到的情况,数据量达千万条时,使用EF查询很慢,但使用EF中的sql语句却很快:比如查询总条数:第一种:dbconext.table.Count();很慢第二种:... 项目后期遇到的情况,数据量达千万条时,使用EF查询很慢,但使用EF中的sql语句却很快:
比如查询总条数:
第一种:dbconext.table.Count(); 很慢
第二种:dbconext.Database.SqlQuery<int>("select count(*) from table").first(); 很快

哎。。。。哪位大神能解释下
展开
 我来答
我零0七
2017-03-03 · 热衷人生的有效性,关注自我
我零0七
采纳数:684 获赞数:11738

向TA提问 私信TA
展开全部

我不是大神,但是你这个问题我有点思路,从MSDN(https://msdn.microsoft.com/zh-CN/library/cc853327.aspx)上可以看到影响EF性能的因素

第二种很快是因为dbcontext没有追踪你执行查询的结果(dbconext.Database.SqlQuery<int>("select count(*) from table")),你对这个结果附加where条件是不会加到EF生成的SQL语句上的

所以对于第一种情况,你可以使用NoTracking(dbconext.table.AsNoTracking().Count())来取消EF对结果的追踪

具体的区别你可以参考:

http://www.cnblogs.com/haogj/archive/2011/05/08/2040196.html

和:

http://www.cnblogs.com/LingzhiSun/archive/2011/04/27/EF_Trick4.html

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式