精华帖 (9) :: 良好帖 (0) :: 新手帖 (12) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-22
最后修改:2010-08-22
不同驱动实现,效率确实往往差别很大。
另外我其实很想知道Oracle OCI相比Thin,性能到底大概可以提高多少...手头没有环境,不知道哪位同仁能透露一下。 |
|
返回顶楼 | |
发表时间:2010-08-23
sswh 写道 用Statement,使用批处理,但autoCommit=true的时候,
结果如下: 清空表 用批处理4插入数据: 批量更新成功 10000 条记录! 1719 ================================ 按上面的测试,影响性能最大的应该是 事务的大小, 批处理的影响次之, PreparedStatement和Statement似乎区别不是很大 PreparedStatement和Statement区别不大是因为sql并没有发生变化 |
|
返回顶楼 | |
发表时间:2010-08-24
mysql的JDBC Batch做得很烂的,如果是Oracle,性能会相差很大的。
MySQL需要使用一个Insert多个Values的方式性能才会好。 |
|
返回顶楼 | |
发表时间:2010-08-24
确实用 Oracle 就看出了差距
不过本地数据库 和非本地数据库 时间也差好多。 |
|
返回顶楼 | |
发表时间:2010-08-27
murainwood 写道 不同驱动实现,效率确实往往差别很大。
另外我其实很想知道Oracle OCI相比Thin,性能到底大概可以提高多少...手头没有环境,不知道哪位同仁能透露一下。 如果不是想找麻烦, 建议你别用oci driver. 另外, 我想提醒的是, 现在JAVA的速度和用NATIVE代码, 性能几乎没有什么差异。 |
|
返回顶楼 | |
发表时间:2010-08-30
感觉以前的经验,oci driver很多bug的,少用为好
|
|
返回顶楼 | |
发表时间:2010-08-31
呵呵,兄弟
被投了新手吧、啥了吧,要答题了吧 通过此帖,看出楼主的求真务实的态度——非常好,心态比那些投新手的人强太多了 大家都喜欢不明真相的围观、喷口水;看看很多人的扯谈,楼主明明说是mysql,最后扯到了oracle 现在大家看东西都很浮躁,被习惯性批判所左右了思想和心态——值得警惕啊 祝楼主答题愉快,保持一颗求真务实的心态 前行的路上,有你我他同行 peterwei 写道 Batch和PrepareStatement比Statement并没有实质性的提高,只是一小点(这个倒是让我奇怪)。
-------------------------------------- ok,结果出来了。确实是setAutoCommit(false);不起作用。原来默认装的mysql数据库不是InnoDB,而是MyISAM,所以是没有事务的。楼上的skzr.org说得对。改数据库后,重测了一下,得到我想要的结果。 清空表 普通的Statement插入数据: 插入数据量:10000 <运行时间: 17.828 秒> 运行时间:17828 毫秒 17.828 ================================ 清空表 通过PrepareStatement插入数据: 插入数据量:10000 <运行时间: 2.594 秒> 运行时间:2594 毫秒 2.594 ================================ 清空表 用批处理插入数据: 批量更新成功 10000 条记录! <运行时间: 2.187 秒> 运行时间:2187 毫秒 2.187 ================================ |
|
返回顶楼 | |
发表时间:2010-08-31
兄弟, 我投个精华, 把票数拉回来。 8票~~~
给个总结: 在没有事务的情况下, Batch和PrepareStatement比Statemen 是没有什么区别的。 Batch所能获得优势就是CPU连续处理, 差异估计不大。我猜猜也就1-5%的差异。 有事务的情况, 我相信这个差异是很大的。 这个情况可以分为: Batch一次提交多少条SQL, 或者一条SQL PrepareStatement/Statemen 一次提交一条为一个事务, 或者一个事务包含多个SQL。 这些性能都是有比较大的差异的。 楼主对细节关心说明考虑问题很周到。 |
|
返回顶楼 | |
发表时间:2010-08-31
sdh5724 写道 兄弟, 我投个精华, 把票数拉回来。 8票~~~
给个总结: 在没有事务的情况下, Batch和PrepareStatement比Statemen 是没有什么区别的。 Batch所能获得优势就是CPU连续处理, 差异估计不大。我猜猜也就1-5%的差异。 有事务的情况, 我相信这个差异是很大的。 这个情况可以分为: Batch一次提交多少条SQL, 或者一条SQL PrepareStatement/Statemen 一次提交一条为一个事务, 或者一个事务包含多个SQL。 这些性能都是有比较大的差异的。 楼主对细节关心说明考虑问题很周到。 你的结论下的不对,不要误导大众 Batch, PrepareStatement, Statemen 和事务没有任何关系! batch , preparestatement 需要数据库和jdbc驱动的双方面支持 首先, dbms 要提供批处理和预编译的功能 其次, jdbc 对上述2个功能要有所支持 上述2着缺一不可。 至于事务方面, 每一语句一事务, 和手动划分事务, 当然后者要快的多。但这个和Batch, PrepareStatement, Statemen没有任何关系。 |
|
返回顶楼 | |
发表时间:2010-08-31
说的是2个不同的东西, 何来误导之说? 楼主的测试已经是基于mysql非事务表了。
谁都知道JDBC/DBMS需要有对应的支持功能。 |
|
返回顶楼 | |