我的问题是这样的。
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多个对象一个一个地去和数据表笔队,我的程序肯定相当的慢,而且确实如此。
有没有什么办法优化让它跟快,我也尝试了用存储过程也是比较慢。
有哪位帮帮我呢,谢谢了
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多个对象一个一个地去和数据表笔队,我的程序肯定相当的慢,而且确实如此。
有没有什么办法优化让它跟快,我也尝试了用存储过程也是比较慢。
有哪位帮帮我呢,谢谢了
例如hash trietree 等等
求具体场景
字符串的特征等信息
然后,编写SQL/HQL进行比对。
实际效果要比你一个一个的比对要快很多。
因为,两种方式,你的程序和数据库的交互次数以及数据的访问次数,都不在同一个数量级上。批量插入,可以规定,每次500个记录,循环20+次,就可以全部入库了,
而且,JDBC底层对批量插入还有优化算法,效率相对较高。如果还嫌速度慢,只能考虑多线程协作处理了,不过那样编程复杂度会大大增加。
所以应该实现建立2个集合的某种关系hash trietree等等,然后来作比较。