我的问题是这样的。
Java主程序提供一个ArrayList<String>,长度超过10000。
而我现在要把ArrayList里的每个字符串对象,拿到数据库里坐比对,看它是否存在于数据表中,数据表也很大超过150万条数据
for(int i=0;i<sf.size();i++){   //sf是这个ArrayList
    
      
       if(ss.check_nameteil(sf.get(i))==1)  //ss是数据库对象
          { System.out.print("***"+sf.get(i));
           author_class.add(sf.get(i));
          }
  if(ss.check_titleteil(sf.get(i))==1)
   {
  System.out.print("###"+sf.get(i));
     title_class.add(sf.get(i));
     }
     }问题是,10000多个对象一个一个地去和数据表笔队,我的程序肯定相当的慢,而且确实如此。
有没有什么办法优化让它跟快,我也尝试了用存储过程也是比较慢。
有哪位帮帮我呢,谢谢了

解决方案 »

  1.   

    String 插到数据库,然后用sql去比
      

  2.   

    String 插到数据库,然后用sql去比
      

  3.   

    根据不同的情况可以有不同的,效率也相对高的解决方案,
    例如hash trietree 等等
    求具体场景
    字符串的特征等信息
      

  4.   

    先将List里面的1W多数据,新建临时表,批量插入数据库。(貌似是batchUpdate)
    然后,编写SQL/HQL进行比对。
    实际效果要比你一个一个的比对要快很多。
    因为,两种方式,你的程序和数据库的交互次数以及数据的访问次数,都不在同一个数量级上。批量插入,可以规定,每次500个记录,循环20+次,就可以全部入库了,
    而且,JDBC底层对批量插入还有优化算法,效率相对较高。如果还嫌速度慢,只能考虑多线程协作处理了,不过那样编程复杂度会大大增加。
      

  5.   

    这个比较合理。如果让数据库去作比较,那只是把计算从程序移到DB,还是需要做一一对比。
    所以应该实现建立2个集合的某种关系hash trietree等等,然后来作比较。