把tArrayList数组列表(数组大小为15330)中的每一个元素都到wordlist(34584条记录) 中查询出现了几次,禁止自动提交。但是效率还是极慢。怎么做可以快一点。c = DriverManager.getConnection("jdbc:mysql://localhost/test",
"root", "root");
c.setAutoCommit(false);
ArrayList<Double> Pt = new ArrayList<Double>();
String querySelect = new String(
"SELECT * FROM wordlist WHERE WordName=?");
try {
PreparedStatement ps = c.prepareStatement(querySelect);
for (int i = 0; i < tArrayList.size(); i++) {
ps.setString(1, tArrayList.get(i));
rs = ps.executeQuery();
rs.last();
Pt.add((rs.getRow() / 100.0));
System.out.println(rs.getRow() / 100.0);
}
ps.close();
c.commit();
c.close();
} catch (SQLException e) {
e.printStackTrace();
}

解决方案 »

  1.   

    检查你的程序,到底是SELECT 查询慢还是其它处理慢。 WordName字段上创建索引试一下。
      

  2.   

    wordlist内容 是什么 ,在查询字段WordName上建立索引试试
      

  3.   

    CREATE TABLE `wordlist` (
      `ID` int(11) NOT NULL AUTO_INCREMENT,
      `FileName` varchar(255) DEFAULT NULL,
      `FileClass` varchar(255) DEFAULT NULL,
      `WordName` varchar(255) DEFAULT NULL,
      `WordCount` int(11) DEFAULT '0',
      PRIMARY KEY (`ID`)

    查询tArrayList中每个元素在表wordlist中出现过几次,然后添加到pt数组列表中,现在就是这个查询很慢。
      

  4.   

    你先把tArrayList的元素写入到一个临时表A里,然后再查询。在wordlist.WordName 上面建索引。
    select WordName ,count(*) from a inner join wordlist on a.WordName =wordlist.WordName 
    group by WordName;得到的这个记录集再循环添加到pt数组里。这样比你在代码里面一个个循环,循环15330*34584次要快很多。
      

  5.   

    不行的,我做的是文本分类,每一个file中的word都有可能在另一个file中出现,所以wordname在wordlist中有重复,不能索引,我把id设为自动递增,主键。
      

  6.   

    晕,总共才几个元素啊,
    (数组大小为15330)中的每一个元素都到wordlist(34584条记录)
    完全可以在内存中操作。无非是一个map,一个list, 然后循环,比数据库快多了。
      

  7.   

    你进这个网站看看,http://blog.sina.com.cn/s/blog_61ad064d0100ibd7.html很详细的,希望能帮到你
      

  8.   

    select count(*) , wordname from wordlist group by wordname
    然后内存中比较 , 应该不会超过10s
      

  9.   

    rs = select count(*) cnt , wordname from wordlist group by wordname
    while (rs.next)
    {
       map.put(rs("wordname"), rs("cnt"));
    }for (int i = 0 ; i < tArrayList.size() ; i++)
    {
        pt = map.get(tArrayList(i))/100;
    }不想写java代码 , 能看懂?