0

我是 SQL 新手(使用 postgreSQL),我编写了一个 java 程序,它从一个大表中进行选择并执行一些功能。问题是,当我运行程序时,我得到一个 java OutOfMemoryError,因为表太大了。我知道我可以使用 LIMIT 运算符从表的开头进行选择,但是有没有办法可以从使用 LIMIT 命令停止的某个索引开始选择?谢谢!

4

3 回答 3

2

Postgres 中有 offset 选项,如下所示:

select from table
offset 50
limit 50
于 2013-07-22T18:55:28.617 回答
0

对于 mysql,您可以使用以下方法:

  1. SELECT * FROM table LIMIT {offset}, row_count
  2. SELECT * FROM table WHERE id > {max_id_from_the previous_selection} LIMIT row_count。第一个 max_id_from_the previous_selection = 0。
于 2013-07-22T18:39:35.203 回答
0

这实际上是 jdbc 驱动程序会透明地为您处理的事情。您实际上可以流式传输结果集,而不是一次将其全部加载到内存中。要在 MySQL 中执行此操作,您需要按照此处的说明进行操作:http: //javaquirks.blogspot.com/2007/12/mysql-streaming-result-set.html

基本上,当您创建调用 connection.prepareStatement 时,您需要传递ResultSet.TYPE_FORWARD_ONLYResultSet.CONCUR_READ_ONLY作为第二个和第三个参数,然后调用setFetchSize(Integer.MIN_VALUE)您的 PreparedStatement 对象。

对其他数据库执行此操作有类似的说明,如果需要,我可以对其进行迭代。

编辑:现在我们知道您需要 PostgreSQL 的说明。请按照此处的说明进行操作:如何从大表中读取所有行?

于 2013-07-22T18:45:02.937 回答