分块读取查询结果有什么优势吗?

问题描述 投票:0回答:1

我有一个实体框架查询,可以返回约 10,000 行。这用于用图钉填充地图。

有没有一种方法可以将结果分块返回,速度与一次读取所有内容一样快?例如,如果我这样做:

.OrderBy(e => e.Id).Skip(offset).Take(1024)

一次读取 1K 的结果,总共与一次读取所有内容的时间大约相同吗?或者还有其他方法可以做到这一点吗?

注意,这不是分页网格的情况,我可以对

.Skip(x).Take(pageSize)
进行一次调用,并且一次调用就足够了,直到它们转到另一页。在这种情况下,我确实需要所有结果。

sql-server entity-framework-core azure-sql-database
1个回答
0
投票

对性能和资源使用影响最大的情况是确保您使用投影 (

Select()
) 仅检索所需的值,或者如果您确实需要加载实体,则使用
AsNoTracking()
查询。这些都确保 EF 不会费心读取或添加到跟踪缓存。

如果您需要所有 10k 项,那么一次加载 10k 行 ID、坐标,也许还有一个名称/标签来填充地图区域应该不成问题。对结果进行分页更多的是一次只需要显示一页值。如果您需要 10k 个项目,一次加载 1k 个项目不会节省资源或时间。更新 10k 项(如果无法批量操作)可以通过一次仅加载/跟踪一个子集来节省资源,只要您清除页面之间的跟踪缓存即可。

© www.soinside.com 2019 - 2024. All rights reserved.