Colder.Admin.AntdVue icon indicating copy to clipboard operation
Colder.Admin.AntdVue copied to clipboard

关于系统自带分页BUG,希望能重视!!!

Open ysq5202121 opened this issue 3 years ago • 11 comments

经过大量的测试,发现分页如果数据量比较大,最后几页是无法展示出来,出现查询不出来的情况,小到数据量2万左右,千万数据测试也是一样,无法查询出来(Sqlserver2012)

ysq5202121 avatar Mar 03 '21 06:03 ysq5202121

生成的SQL看一下

Coldairarrow avatar Mar 04 '21 10:03 Coldairarrow

生成的SQL用数据库查询很快,但是用程序却很慢,似乎与注入的参数有关系

ysq5202121 avatar Mar 08 '21 03:03 ysq5202121

经过多方面的比对,目前来说可以排除SQL本身查询慢,只有最后几页数据比较慢,前面的是不会慢的,同样的SQL用数据库执行速度很快.

ysq5202121 avatar Mar 08 '21 04:03 ysq5202121

@ysq5202121 设置主键了吗?索引缓存清空下试试

Dishone avatar Mar 09 '21 08:03 Dishone

@ysq5202121 设置主键了吗?索引缓存清空下试试 主要用程序就慢起来了,主键都设置了,2W数据量不大的,就算没有索引也应该走的不慢

ysq5202121 avatar Mar 16 '21 07:03 ysq5202121

大佬们自己可以测试下呗,很容易测试出来

ysq5202121 avatar Mar 17 '21 02:03 ysq5202121

@ysq5202121 我这里分页分表每次重建索引速度就回来了

Dishone avatar Mar 17 '21 03:03 Dishone

@ysq5202121 我这里分页分表每次重建索引速度就回来了

大佬多少数据啊,问题是同样的数据在数据库执行没有问题。 目前采用AsParallel()并行查询可以解决这个问题. linqtosql 对于后面页数会越来越费劲,采用并行查询可以解决这个问题.

ysq5202121 avatar Mar 17 '21 07:03 ysq5202121

///

/// 获取分页数据(包括总数量) /// 采用并行查询 /// /// 泛型 /// 数据源 /// 分页参数 /// public static async Task<PageResult<T>> GetPageResultByParallelAsync<T>(this IQueryable<T> source, PageInput pageInput) { int count = await source.CountAsync(); var list = source.OrderBy($@"{pageInput.SortField} {pageInput.SortType}") .AsParallel().Skip((pageInput.PageIndex - 1) * pageInput.PageRows) .Take(pageInput.PageRows) .ToList(); return new PageResult<T> { Data = list, Total = count }; }

ysq5202121 avatar Mar 17 '21 07:03 ysq5202121

@ysq5202121 不应该在SQL上使用PLINQ该服务器执行查询。如果建立多个并发连接,则会增加锁定和争用。一个单一的查询负载的多个项目比N个并发更快。如果查询缓慢,请检查原因是否缺少索引太复杂了吗?实际的SQL是什么样的?

Dishone avatar Mar 18 '21 02:03 Dishone

我瞧瞧

ysq5202121 avatar Mar 25 '21 04:03 ysq5202121