0

我可以限制结果集中的行数吗?我的表包含大约 800000 行,如果我在结果集中获取它们,这肯定会导致 OOM 异常。每行有 40 列。我不想同时处理它们,但每一行都要过滤掉一些数据。

先感谢您。

4

4 回答 4

1

像下面这样的东西应该是一个 SQL 解决方案,但虽然效率很低,因为每次你都必须获取越来越多的行。

假设您的 ORDER BY 是基于唯一的 int,并且您一次将获取 1000 行。

SET currenttop = 0;
SET cuurentid = 0;
SELECT * FROM YourTable t
WHERE t1.ID > @currentID AND (@currentid := t1.ID) IS NOT NULL; 
LIMIT (@currenttop:=@currenttop+1000);

当然,您可以选择处理 Java 代码中的变量。

于 2013-09-20T14:28:41.810 回答
1

您可以使用JDBC 提取大小来限制结果集中的结果。它比 SQL LIMIT更好,因为它也适用于其他数据库而无需更改查询。Jdbc 驱动程序不会从数据库中读取整个结果。每次它将检索由 fetch size 指定的记录,并且不再有内存问题。

于 2013-09-20T14:25:44.630 回答
0

您可以limit在 sql 查询中使用关键字,请参见以下内容

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

您可以在此处阅读有关使用的更多信息limit

干杯!!

于 2013-09-20T14:20:11.457 回答
-1

你有几个选择。首先,为 SQL 查询添加限制。其次,您可以使用JDBCTemplate.query()RowCallbackHandler一次处理一行。该模板将处理大型结果集的内存问题。

于 2013-09-20T14:16:51.247 回答