当要跳过的数字很大时,实体Framerowk的“跳过/获取"非常慢 [英] Entity Framerowk Skip/Take is very slow when number to skip is big

查看:64
本文介绍了当要跳过的数字很大时,实体Framerowk的“跳过/获取"非常慢的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,代码非常简单:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆