【问题标题】:Select from a SQL table starting with a certain index?从某个索引开始的 SQL 表中选择?
【发布时间】:2013-07-21 14:50:45
【问题描述】:

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

【问题讨论】:

  • 请说明您使用的是什么 DBMS
  • 您使用的是哪个 RDBMS?
  • 尝试以下方法之一:google.com/search?q=mysql+paging
  • @LuisLL 基于使用 LIMIT 命令停止猜测 MySQL

标签: sql


【解决方案1】:

Postgres 中有偏移选项,如下所示:

select from table
offset 50
limit 50

【讨论】:

    【解决方案2】:

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

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

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

    编辑:现在我们知道您需要有关 PostgreSQL 的说明。按照此处的说明进行操作:How to read all rows from huge table?

    【讨论】:

      【解决方案3】:

      对于 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-25
        • 2021-08-26
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 2017-10-24
        • 2018-10-17
        • 1970-01-01
        相关资源
        最近更新 更多