0

我的结果集太大。如果它返回一个消耗内存的巨大数据集,那么它会OutOfMemory在服务器中显示错误。除了增加堆大小之外,我该如何处理这个问题?

4

5 回答 5

0

如果您不能将整个结果集加载到内存中......那么不要!根据情况,我可以想到三种选择:

  • 一次只读取部分结果集;例如,在“页面”中获取它。
  • 阅读时减少结果集;例如,通过提取您需要的字段、制表或其他方式。
  • 重组您的查询,以便可以在数据库中完成数据缩减。

如果您提供了有关结果集包含的内容以及您正在使用它做什么的更多详细信息,我们也许可以提供具体的建议。

于 2013-03-14T10:10:08.757 回答
0

如果您可以构造查询,以便单个查询可以返回您需要的所有内容,那么通过结果集流,您可以让数据库一次将结果返回给您一行。然后以增加客户端软件和数据库之间的数据流量为代价大幅减少内存使用量。在我自己的公司中,我们发现这在处理返回数百万行的结果集时非常有效。此功能依赖于数据库,对于 MySQL,它在以下位置进行了描述

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-implementation-notes.html

于 2013-03-14T11:15:45.297 回答
0

尽量不要每次放这么多数据,使用分页器或类似的东西。

于 2013-03-14T09:53:22.183 回答
0

首先检查您对结果集的查询是否正确/优化。
在大多数数据库中,您可以限制返回的行数,例如

SELECT top(1000) * FROM mytable;
于 2013-03-14T09:54:49.667 回答
0

使用分页器模式:不是一次获取所有数据,而是定期仅获取部分数据。例如,不是得到 100 个结果,而是 5 次得到 20 个结果:0-19,然后 20-39,然后 40-59,等等......

于 2013-03-14T09:56:06.250 回答