JDBC数据库操作解惑

目前在测试JDBC数据库多线程操作,想要提高效率,无奈发现
每次运行的SQL执行时间不太一样,遍历ResultSet的时间,也不太一样
为了方便观察,我采用单线程单Session会话模拟,核心代码
try(Connectionconnection=DBUtils.openConnection()){
for(inti=0;i<6;i++){
longs=System.currentTimeMillis();
System.out.println("准备执行SQL...............");
try(PreparedStatementpreparedStatement=connection.prepareStatement(PRE_SQL+i);
ResultSetresultSet=preparedStatement.executeQuery()){
longcost1=System.currentTimeMillis()-s;
System.out.println("执行SQL耗时:"+cost1+"ms");
s=System.currentTimeMillis();
while(resultSet.next()){
names.add(resultSet.getString("name"));
}
longcost2=System.currentTimeMillis()-s;
System.out.println("遍历结果耗时:"+cost2+"ms");
System.out.println("总耗时:"+(cost1+cost2)+"ms");
System.out.println();
}catch(SQLExceptione){
e.printStackTrace();
}
}
System.out.println("集合大小为:"+names.size());
}catch(ClassNotFoundException|SQLExceptione){
e.printStackTrace();
}
然后结果大同小异,如下:
准备执行SQL...............
执行SQL耗时:2194ms
遍历结果耗时:474ms
总耗时:2668ms
准备执行SQL...............
执行SQL耗时:1934ms
遍历结果耗时:407ms
总耗时:2341ms
准备执行SQL...............
执行SQL耗时:793ms
遍历结果耗时:536ms
总耗时:1329ms
准备执行SQL...............
执行SQL耗时:1812ms
遍历结果耗时:395ms
总耗时:2207ms
准备执行SQL...............
执行SQL耗时:810ms
遍历结果耗时:643ms
总耗时:1453ms
准备执行SQL...............
执行SQL耗时:682ms
遍历结果耗时:2207ms
总耗时:2889ms
集合大小为:6000000
补充一句,有6个测试表,test_0至test_5,每个有100w测试数据。
望了解其中一二的解答下,困扰很久这个问题了,感谢~
慕运维8079593
浏览 346回答 2
2回答

紫衣仙女

数据库查询时间粗略地可以分为:建立网络连接sql语句传输sql语句解析sql语句执行数据传输客户端数据处理等这里(1)可能因使用连接池,使得时间不尽相同,取决于连接池的实现和参数设置,可能某一次与其他次建立连接时间不一样;(2)基本为定值,但也有可能在客户端进行PreparedStatement缓存而不一致;(3)同(2),数据库会对解析进行缓存,第一次可能和第二次不一样;(4)数据库一会对执行过的sql进行短时间缓存;(5)取决于数据量和网速,对于同样的数据量变化不大;(6)取决于客户端代码,但一般会小于ms级.这里还没有考虑数据库服务器端的配置和是否有主从及负载均衡的配置等等.所以你测试的数据是变化的很正常不过了,需要采集大量数据,最好是与业务相似的使用场景才有价值.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript