首页 新闻 会员 周边

entity framework 三十万的数据的分页怎么写

0
悬赏园豆:5 [已关闭问题] 关闭于 2015-12-07 16:47

最近在项止中使用EF,但项目上线后,有部分表数据达到了好几十万,发现EF加载数据的时非常的慢,具体的方法如下:

public virtual ICollection<T> FindPager<TKey>(Expression<Func<T, bool>> match, PageInfo info, Expression<Func<T, TKey>> orderByProperty, bool isDescending = true)
{
int pageindex = (info.CurrenetPageIndex < 1) ? 1 : info.CurrenetPageIndex;
int pageSize = (info.PageSize <= 0) ? 20 : info.PageSize;

int excludedRows = (pageindex - 1) * pageSize;

IQueryable<T> query = null;
if (match == null)
{
query = this.objectSet;
}
else
{
query = this.objectSet.Where(match.Compile()).AsQueryable();
}
info.RecordCount = query.Count();
if (isDescending)
{
query = query.OrderByDescending(orderByProperty).Skip<T>(excludedRows).Take<T>(pageSize);
}
else
{
query = query.OrderBy(orderByProperty).Skip<T>(excludedRows).Take<T>(pageSize);
}
return query.ToList();
}

经过调试,代码在query.count()和query.TOList()的位置会等待很久,且query.count()和query.TOList()好像是计算了两次,但是TOList后再分页会占服务器性能,是否有其它的方法?

 

求大神指导 EF的查询数据的优化方案和注意事项 

 

补充:把EF生成的SQL放到数据库内执行,速度非常的快,但在程序中就非常的慢

问题补充:

没有大神么。。。。

难道真要整两个数据库连接,一个用EF,一个用原始的ado?

beggar_的主页 beggar_ | 初学一级 | 园豆:10
提问于:2015-07-13 17:03
< >
分享
所有回答(5)
0

我也遇到了同样的问题 同求

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2015-07-13 17:27
0

查询的时候不要有or一般是sql优化问题。

检查下最终生成的sql执行语句

吴瑞祥 | 园豆:29449 (高人七级) | 2015-07-13 18:17

其实查询的条件很简章,一般都是source.where(t=>t.a==b),这样的条件,生成的SQL拿到数据库去执行,速度非常的快,但是在程序中就非常的慢,如我说的COUT和TOLIST的用了很长的时间

支持(0) 反对(0) beggar_ | 园豆:10 (初学一级) | 2015-07-14 09:26

@beggar_: 别闹.执行慢就是sql原因.你用数据库监视看下执行的sql,就能知道原因

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2015-07-14 09:30
0

这个要从SQL和数据库方面去优化了。有没有索引?

ㄓㄤㄑㄧㄤ | 园豆:251 (菜鸟二级) | 2015-07-14 08:49

只有一个主键索引

支持(0) 反对(0) beggar_ | 园豆:10 (初学一级) | 2015-07-14 09:26
0

建议自己写存储过程,EF调用写的存储过程,会快一些!

请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-07-14 09:17
0
return query.ToList();

改成

return query.AsNoTracking().ToList();

会不会好很多呢?

如果不使用AsNoTracking,可以考虑下按需查询.select(t=>new { })

农码一生 | 园豆:118 (初学一级) | 2017-06-08 13:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册