日期:2014-05-18  浏览次数:20617 次

一次DB访问,执行多个sql检索
如题,由一个Connection创建的多Statement,最后释放Connection会提高速度吗? 我觉得应该不会吧,如果我通过程序在DB里创建个存储过程的话,是不是一定能实现,(网上说能),有没有别的方法,方便点的,请赐教,谢谢

------解决方案--------------------
释放connection是因为如果连的太多了会拖速度
你想一次connection执行多个sql要么用子查询要么就用procedure了
------解决方案--------------------
可以用数据库连接池;

如果多个语句相似,可以尽量采用批量提交方式如PreparedStatement.addBatch()方法

------解决方案--------------------
jf
------解决方案--------------------
这个事情要综合考虑

分析一下过程,连接数据库,提交sql语句给数据库,数据库执行检索,数据库向客户端返回结果集

第一个,连接耗时,耗时极小,忽略
第二个,网络耗时,耗时比较小,往高了算,能有几千个字节?这里要注明一下用batch的好处,假设过程分为三部分:报告,提交sql语句,接受报告。如果不使用batch,会多次报告和接受报告,如果sql语句多,还是用batch的好,只有一次报告过程就把sql语句都提交了。
第三个,操作耗时,就待定了,通常来说,一个查询语句是低于10秒的,超过10秒就要考虑查询优化了
第四个,网络耗时,假设结果集有个百十来条,数据量就得按k算了。

在大部分应用中,第四个耗时,占用了最多时间。

你要估算第三个耗时,在数据库上调试即可,
第四个耗时,很容易在程序中实现,计算整个数据库操作代码耗时,减去第三个耗时就等于第二+第四个耗时,而第二个耗时,基本上是可以忽略的


当有了这些耗时数据后,你就清楚,到底是哪里影响了程序的反应时间,再进一步讨论。


从高性能角度来说,多个数据库操作共用一个连接不行。
比如我开发的计费系统,查询并缓存,自动更新的功能,是单独用一个连接的
而写记录的功能,是用2楼所说,batch提交,自己也独享一个连接

------解决方案--------------------
PreparedStatement.addBatch()
执行多个语句最好用这种,注意事务处理
------解决方案--------------------
由一个Connection创建的多Statement的方式没有问题。
如果用一个存储过程里可以实现,这个时候效率会更高。
------解决方案--------------------
如果用连接池的话不存在Connection关闭,只是被连接池回收,然后再去利用,所以在连接池中的close是假关闭,真回收
这一点在耗时上意见减少很多了

还有就是你说的用存储过程,存储过程是可以减少sql的编译时间,但是也不能什么都是存储过程,存储过程也是一个双刃剑

到底什么时候用存储过程需要仔细的权衡一下才可以


------解决方案--------------------
还是用:PreparedStatement.addBatch()