当要跳过的数字很大时,实体Framerowk的“跳过/获取"非常慢 [英] Entity Framerowk Skip/Take is very slow when number to skip is big
问题描述
因此,代码非常简单:
var result = dbContext.Skip(x).Take(y).ToList();
当x大(〜1.000.000)时,查询非常慢. y小-10、20.
When x is big (~1.000.000), query is very slow. y is small - 10, 20.
为此的SQL代码是:(来自sql profiler)
SQL code for this is: (from sql profiler)
SELECT ...
FROM ...
ORDER BY ...
OFFSET x ROWS FETCH NEXT y ROWS ONLY
问题是,是否有人知道如何加快这种分页? 谢谢.
The question is if anybody knows how to speed up such paging? Thanks.
推荐答案
我认为OFFSET
.. FETCH
在从大数据浏览第一页时(在大多数应用程序中经常发生)非常有用,并且从大数据查询高阶页面时,存在性能缺陷.
I think OFFSET
.. FETCH
is very useful when browsing the first pages from your large data (which is happening very often in most applications) and have a performance drawback when querying high order pages from large data.
检查此文章了解更多详细信息关于性能和OFFSET
.. FETCH
.
Check this article for more details regarding performance and alternatives to OFFSET
.. FETCH
.
在应用页面调度之前,尝试对数据应用尽可能多的过滤器,以便针对较小的数据量运行页面调度.很难想象用户不希望浏览100万行.
Try to apply as many filters to your data before applying paging, so that paging is run against a smaller data volume. It is hard to imagine that the user wants no navigate through 1M rows.
这篇关于当要跳过的数字很大时,实体Framerowk的“跳过/获取"非常慢的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!