实体框架6无法处理大数据

时间:2016-03-08 07:17:38

标签: sql-server asp.net-mvc entity-framework linq-to-sql large-data

我在使用实体框架6处理大数据时遇到了麻烦。当我尝试从数据库中获取数据时,它会产生超时错误。我只是在我的查询中包含2个额外的表。我的意思是我加入3张桌子,其中一张桌子现在是空的。 (ORDER,ORDER_DETAILS,PEOPLE)

ORDERS表有385K条记录,PEOPLE有400K条记录。我也没有得到所有记录。我只为一页打了25条记录。 (我正在使用分页。)

这是我的示例代码。 15秒后它出现超时错误,当我从Sql Profiler获得tsql查询时,它可以工作但需要37秒。

// skipCount is integer and it changes with page number.
// pageSize is fixed integer number which is 25.
// I also set timeout about 180 seconds
var list = _uow.Repository<ORDERS>()
        .Query(x => x.ACTIVE == true)
        .Include(x => x.ORDER_DETAILS)
        .Include(x => x.PEOPLE)
        .OrderBy(sorting)
        .Skip(skipCount)
        .Take(pageSize)
        .ToList();

另外,如果我使用LinqToSql查询工作得非常快。

var list = (from o in _context.ORDERS
           join od in _context.ORDER_DETAILS on o.ID equals od.DETAIL_ID
           join p in _context.PEOPLE on o.CUSTOMER_ID equals p.ID
           select ab)
        .OrderBy(sorting)
        .Skip(skipCount)
        .Take(pageSize)
        .ToList();

如何解决此性能问题?或者我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

我使用这个sql代码重建所有索引,我的问题现在已修复。 谢谢你的帮助。

USE [DATABASE_NAME]
EXEC [sp_MSforeachtable] @command1="RAISERROR('DBCC DBREINDEX(''?'') ...',10,1) WITH NOWAIT DBCC DBREINDEX('?')"