.NET中的EF效率问题
项目后期遇到的情况,数据量达千万条时,使用EF查询很慢,但使用EF中的sql语句却很快:比如查询总条数:第一种:dbconext.table.Count();很慢第二种:...
项目后期遇到的情况,数据量达千万条时,使用EF查询很慢,但使用EF中的sql语句却很快:
比如查询总条数:
第一种:dbconext.table.Count(); 很慢
第二种:dbconext.Database.SqlQuery<int>("select count(*) from table").first(); 很快
哎。。。。哪位大神能解释下 展开
比如查询总条数:
第一种:dbconext.table.Count(); 很慢
第二种:dbconext.Database.SqlQuery<int>("select count(*) from table").first(); 很快
哎。。。。哪位大神能解释下 展开
展开全部
我不是大神,但是你这个问题我有点思路,从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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询