我正在尝试创建一个Java程序来清理和合并表中的行。该表很大,大约有50万行,而我当前的解决方案运行得非常慢。我要做的第一件事就是简单地获得一个内存中的对象数组,这些对象表示表的所有行。这是我在做什么:
这需要很长时间。实际上,它甚至没有超过第二个增量(从1000到2000)。查询要花很长时间才能完成(尽管当我直接通过MySQL浏览器运行同一件事时,它的运行速度相当快)。自从我直接使用JDBC以来已经有一段时间了。有更快的选择吗?
首先,确定要在内存中存储整个表吗?也许您应该考虑(如果可能)选择要更新/合并/等的行。如果确实需要整个表,则可以考虑使用可滚动的ResultSet。您可以这样创建它。
// make sure autocommit is off (postgres) con.setAutoCommit(false); Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, //or ResultSet.TYPE_FORWARD_ONLY ResultSet.CONCUR_READ_ONLY); ResultSet srs = stmt.executeQuery("select * from ...");
它使您可以使用“绝对”和“相对”方法移动到所需的任何行。