选择表中的每一行而不使用限制?

时间:2013-05-13 03:39:44

标签: mysql jdbc

我正在使用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是否在内部执行此操作,或者它是否尝试首先将整个查询结果集加载到内存中?

由于

1 个答案:

答案 0 :(得分:0)

MySQL会运行它并尽力确保,或者至少尝试使用我们的内存,直到它耗尽。在其他一些方面,这也是有趣的亮点:

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