Entity Framework6无法处理大数据
Entity Framework 6 can't work with large data
我在使用 entity framework 处理大数据时遇到了问题 6. 当我尝试从数据库获取数据时出现超时错误。我只是在我的查询中添加了 2 个额外的 table。我的意思是我要加入 3 tables,其中一个现在是空的。 (订单,ORDER_DETAILS,人)
ORDERS table 有 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();
如何解决这个性能问题?或者我的错误在哪里?
我使用此 sql 代码重建所有索引,我的问题现已解决。
感谢您的帮助。
USE [DATABASE_NAME]
EXEC [sp_MSforeachtable] @command1="RAISERROR('DBCC DBREINDEX(''?'') ...',10,1) WITH NOWAIT DBCC DBREINDEX('?')"
我在使用 entity framework 处理大数据时遇到了问题 6. 当我尝试从数据库获取数据时出现超时错误。我只是在我的查询中添加了 2 个额外的 table。我的意思是我要加入 3 tables,其中一个现在是空的。 (订单,ORDER_DETAILS,人)
ORDERS table 有 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();
如何解决这个性能问题?或者我的错误在哪里?
我使用此 sql 代码重建所有索引,我的问题现已解决。 感谢您的帮助。
USE [DATABASE_NAME]
EXEC [sp_MSforeachtable] @command1="RAISERROR('DBCC DBREINDEX(''?'') ...',10,1) WITH NOWAIT DBCC DBREINDEX('?')"