测试jdbc几种操作mysql数据方法的速度
2013-03-24 12:11
169 查看
写了几段测试程序,测试一下mysql的性能.简单说下环境,tomcat下使用连接池连接的mysql,测试方式以下3种:
1:每次从连接池获得一个连接执行一个固定的insert语句2000次:
insert into test (testcol,testcol1,testcol2,testcol3,testcol4,testcol5,testcol6,testcol7)
values('aaaaaaa','aaaaaaa','aaaaaaa','aaaaaaa','aaaaaaa','aaaaaaa','aaaaaaa','aaaaaaa')
每次执行后连接关闭.
2:每次从连接池获得一个连接执行一个预编译的insert语句2000次:
insert into test (testcol,testcol1,testcol2,testcol3,testcol4,testcol5,testcol6,testcol7)
values(?,?,?,?,?,?,?,?)
每次执行后连接关闭.
3:从连接池中取一个连接,执行一个预编译的insert语句2000次:
insert into test (testcol,testcol1,testcol2,testcol3,testcol4,testcol5,testcol6,testcol7)
values(?,?,?,?,?,?,?,?)
2000条语句执行完毕,关闭该连接
4:从连接池中获得一个连接,设置预编译语句:
insert into test (testcol,testcol1,testcol2,testcol3,testcol4,testcol5,testcol6,testcol7)
values(?,?,?,?,?,?,?,?)
2000次循环,每次设置完参数后执行addBatch.最后执行excuteBatch();
测试结果如下:
可以看出来,直接传递sql语句的方式最慢达到了6968毫秒.
第3\4种方式差别不太多.主要是我的程序和数据库在同一台机器上.excuteUpdate()每执行一次数据就会在网络上往返传输一次数据,执行2000次就会往返2000次.但使用了excuteBatch(),数据在网络上只往返了1次.所以当多次执行同一个sql时最适合使用excuteBatch()方式.例如,服务器向数据库中写日志,可以采用积累一定的日志信息后,定时采用excuteBatch()传送到服务器
1:每次从连接池获得一个连接执行一个固定的insert语句2000次:
insert into test (testcol,testcol1,testcol2,testcol3,testcol4,testcol5,testcol6,testcol7)
values('aaaaaaa','aaaaaaa','aaaaaaa','aaaaaaa','aaaaaaa','aaaaaaa','aaaaaaa','aaaaaaa')
每次执行后连接关闭.
2:每次从连接池获得一个连接执行一个预编译的insert语句2000次:
insert into test (testcol,testcol1,testcol2,testcol3,testcol4,testcol5,testcol6,testcol7)
values(?,?,?,?,?,?,?,?)
每次执行后连接关闭.
3:从连接池中取一个连接,执行一个预编译的insert语句2000次:
insert into test (testcol,testcol1,testcol2,testcol3,testcol4,testcol5,testcol6,testcol7)
values(?,?,?,?,?,?,?,?)
2000条语句执行完毕,关闭该连接
4:从连接池中获得一个连接,设置预编译语句:
insert into test (testcol,testcol1,testcol2,testcol3,testcol4,testcol5,testcol6,testcol7)
values(?,?,?,?,?,?,?,?)
2000次循环,每次设置完参数后执行addBatch.最后执行excuteBatch();
测试结果如下:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 平均值 | |
方式1: | 4439 | 6777 | 4727 | 6468 | 6258 | 9719 | 10270 | 4525 | 7763 | 8736 | 6968.2 |
方式2: | 5448 | 5214 | 4794 | 4905 | 6212 | 6924 | 6131 | 7287 | 6879 | 7128 | 6092.2 |
方式3: | 4906 | 6296 | 5835 | 4592 | 4686 | 7431 | 4664 | 5777 | 8029 | 4572 | 5678.8 |
方式4: | 4830 | 5895 | 5685 | 5126 | 5586 | 4932 | 5250 | 5862 | 5976 | 5589 | 5473.1 |
第3\4种方式差别不太多.主要是我的程序和数据库在同一台机器上.excuteUpdate()每执行一次数据就会在网络上往返传输一次数据,执行2000次就会往返2000次.但使用了excuteBatch(),数据在网络上只往返了1次.所以当多次执行同一个sql时最适合使用excuteBatch()方式.例如,服务器向数据库中写日志,可以采用积累一定的日志信息后,定时采用excuteBatch()传送到服务器
相关文章推荐
- mysql快速生成测试数据的方法,以及分页limit语句优化
- mysql数据导入增加速度方法
- mysql的数据导入导出几种方法
- mysql 跨表更新数据的几种操作
- mysql中迅速插入百万条测试数据的方法
- JDBC连接MySQL 方法(封装方法,把增删改查操作封装在函数中)
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- C++操作MySQL大量数据插入效率低下的解决方法
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- JDBC 3种获得mysql插入数据的自增字段值的方法
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- Objective-C几种字符串处理速度的测试数据
- (转载)mysql中百万级数据插入速度测试
- mysql中迅速插入百万条测试数据的方法
- 讲述mysql数据表几种有效优化方法
- MySql,PostgreSql,SqlServer数据写入读取速度对比测试
- 由于某种错误导致数据表数据巨大(千万级别),删除后对该数据操作速度极慢的原因及解决方法
- JDBC连接Mysql实现数据的插入、更改操作