关于EF+MVC5分页查询数据效率问题

时间:2023-03-09 08:49:50
关于EF+MVC5分页查询数据效率问题

2017-03-31 11:57:41,290 [5] ERROR ErrorMsg - System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。

---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。

---> System.ComponentModel.Win32Exception: 等待的操作过时。

在一次百万级数据查询中出现此异常,通过多次的检查终于发现问题是由于数据库存储过程查询过长导致超时

在控制器部分我使用了按时间来排序

未修改代码:

var tempnoteserialno = TB_NOTESERIALNOService.LoadPageEntities<DateTime?>(pageIndex, pageSize, out totalCount,
BOULDENUM, n => n.SortDateTime, true).ToList();

未修改前的查询生成存储过程导致数据库查询很慢100万数据的查询需要10分钟左右,原因是对于时间类型字段的排序耗时。

修改后代码:

var tempnoteserialno = TB_NOTESERIALNOService.LoadPageEntities<string>(pageIndex, pageSize, out totalCount,
BOULDENUM, n => n.StrimpNum, true).ToList();

修改后按一个字符型字段进行排序,效率瞬间上升。