日期:2014-05-20  浏览次数:20573 次

$$$$最后90分求一效率问题
数据库中的数据量比较大,在做如下事务处理的时候发现速度奇慢。求改进方案

得到HashMap;//这个HashMap从数据库中读取数据填充,填充效率很高

set <Entry <...> >   set_hm=HashMap.entrySet();
//然后循环遍历这个set_hm
for <Entry <...> me:set_hm> {
        //   遍历得到key和value赋值给PreparedStatement的set参数,比如:
        ps.setInt(1,me.getKey());
        //然后执行数据库查询操作,返回resultset
        ResultSet   rs=ps.executeQuery();

//我试过在这个for循环里不加sql查询,直接遍历一下hashmap的元素,效率很高,秒杀,但只要一加这个查询,速度一下子下来。请问有什么方法来解决这个问题
       

}

------解决方案--------------------
个人意见,使用JDO。也可以在其他CPU时间比较充裕的时候,先进行JDBC查询。或者换数据库,比如Oracle。
------解决方案--------------------
数据库连接池
------解决方案--------------------
和数据库相关比较慢,一般都是因为创建连接的时候比较费时。你可以察看一下瓶颈是哪个部分的。
------解决方案--------------------
如一定每个KEY值都去查一下数据库,好象只有给KEY字段加个索引会快好多,但还是会感觉慢的.
但一次从数据库取很多值回来,再查会是个好注意.
------解决方案--------------------
学习一下.
------解决方案--------------------
如果是没有返回类型的情况,可以用下批处理
在你的循环里
{
...
ps.setInt(1,me.getKey());
ps.addBath();
}
最后提交
ps.executeBath();
...
对于查寻,因为要返回只能考虑下连接池了,oracle...

------解决方案--------------------
是否考虑过将一定数据先放到resultset(或者其他的)
然后再一起插入?
------解决方案--------------------
HOHO
------解决方案--------------------
能不能把N+1的问题改称1+1的问题