【发布时间】:2018-01-12 16:37:49
【问题描述】:
我正在学习 C# 并试图了解有关集合的更多信息。几天前我请了一位导师,他告诉我 Linq 迭代大数据结果的优点,所以我打算使用它,但现在想知道我是否理解错误。
我正在查询 Mysql,将有多达 200,000 个结果需要格式化并以 500 个为一组以 JSON 格式发布到 HTTP 服务器。我应该进行单个查询,然后使用 Linq 对结果进行分页,还是应该将 SELECT 分成 500 个组?
我的理解是数据流是:
Mysql
=> MysqlDataAdapter
=> Fill DataSet
=> Use Linq to paginate
或者
Mysql
=> MysqlDataAdapter (Limit 500)
=> Fill DataSet
只是想从性能角度找出哪种方式更有意义。它将查询本地主机。
【问题讨论】:
-
如果您想要 500 个结果,那么我不会从数据库中请求所有 200,000+(并且可能会增加)。您的数据库查询应该允许您选择页码和页面大小。
-
性能观点 是一个广义的术语(想想 CPU/内存/IO 等等)并且没有目标(我需要能够在一秒钟内运行 1000 次) ) 答案充其量只是一个仍然不太可能适合您的情况的意见。
-
感谢 Rene 的评论,你说得对,我没有提到它如何/何时运行。第一次运行时,它将以 500 个为一组处理所有 200,000 个结果。之后,它将每 5 分钟执行一次更改的项目。试图看看如何将其合并到我的通用查询类中:stackoverflow.com/a/6185236/3025534
-
另一个选项是使用 Provider 对象的能力来一次加载许多行。考虑到它们正在做什么,它可能没有那么有用,因为您必须保持某种偏移量(也许 RowFilter 会减轻这种情况)。但是
DataAdapter.Fill(int First, int Count, DataTable[])允许我们在给定大小的“页面”中加载数据