在不影响速度的情况下在MySQL中检索大型结果集

时间:2013-01-08 12:22:13

标签: java mysql resultset mib

在我的应用程序中,我的结果集包含超过20000行。我想将它保存到数组列表。我正在使用以下代码。

Class.forName("com.mysql.jdbc.Driver") ;
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Data",     "root", "root") ;
  Statement stmt = conn.createStatement() ;
  String query = "select * from temp ;" ;
  ResultSet rs = stmt.executeQuery(query) ;

  ArrayList<String> varList = new ArrayList<String>();
  while(rs.next()){
  varList.add(rs.getString(1));
  }

当我使用查询时,从结果集中获取数据需要更多时间,如果表包含超过20000个条目,则速度太慢。怎么解决这个问题?任何建议都会非常好。

4 个答案:

答案 0 :(得分:1)

我强烈怀疑你正试图解决错误的问题。无论你用这些20,000行做什么,你都应该在数据库中 并且只返回操作的结果(希望这将占用更少的空间)给客户端。

如果您确切地告诉我们您要对数据做些什么,我们可能会就如何做到这一点提供更具体的建议。

(或者,如果你真的需要客户端的所有20,000行,你可能想要完全跳过数据库并将它们存储在客户端。)

答案 1 :(得分:1)

20000在数据库行方面不是一个很大的数字。

你的问题可能在ArrayList中。

默认情况下,ArrayList有一个默认大小,我不知道有多少,比如100。当插入的项目超过这个数字时,Java会创建一个新的arraylist,其大小增加一些值,I'我不太确定多少,也说100。然后,先前列表中的内容将被复制到新列表中。在您的情况下,这些都是字符串操作。所以你可以看出为什么它很慢。请执行以下操作可以解决您的问题。

int rsSize = getResultSetSize(connection,query);  //return the size of the result set first
ArrayList<String> varList = new ArrayList<String>(rsSize);

答案 2 :(得分:0)

我怀疑你的问题不是数据库,它可能是列表中项目的连接。你应该为java提供更多的内存。如果是list.add那么你可以通过分配一个数组大小的结果然后使用索引将数据插入数组来加快速度。

答案 3 :(得分:0)

获取后,您要对这20000条记录做些什么。您想做什么,看看您是否可以使用PL-SQL代码在数据库级别执行此操作。许多程序员不使用PL-SQL的强大功能。无论您使用其他高级编程语言做什么,其中大部分内容都可以通过PL-SQL完成。