0

我正在将 jdbc 与 mysql 一起使用。我需要遍历表中的每一行(60,000 行,表 = InnoDB),并对每一行执行一些处理。

mysql会接受没有这样限制的查询吗?在最简单的实现中,我只需选择整个表,并在光标为我提供更多结果时不断迭代结果:

PreparedStatement stmt = conn.prepareStatement("SELECT * FROM foo");
ResultSet rs = stmt.getResultSet();
while (rs.next()) {
    .. do stuff on each row ..
}

我当然可以实现分页查询来分批执行此操作,但按照第一种方法中的说明进行操作会更简单。我想知道mysql是在内部这样做,还是先尝试将整个查询结果集加载到内存中?

谢谢

4

1 回答 1

0

MySQL 肯定会运行它并尽其所能,或者至少尝试使用我们的内存直到它用完。其他几点也是有趣的亮点:

  1. 即使使用 LIMIT,MySQL Parser 仍然会在您的表中进行全扫描。LIMIT 在这个过程之后运行在一个级别;
  2. MySQL 会尝试使用你的内存,如果内存不够,Parser 会将其交换到文件系统,这在性能方面要慢得多且成本更高;
  3. 尝试使用索引和 WHERE CLAUSE 来充分利用您的查询。当然,您不需要将所有这些都带到您的应用程序层;

祝你好运!

于 2013-05-13T03:51:08.610 回答