[英]Performance of JDBC for mysql is very slow for repeatedly query
我有一个程序需要用Java编写大量查询,选择JDBC来操作mysql db。 我的代码框架如下:
PreparedStatement stmt = conn.preparedStatement(
"SELECT name FROM users WHERE id = ?" )
Iterator<String, Double> it = map.entrySet().iterator();
//map is relativelly large, holding about 100,000 records,
//each need to query mysql, and do some computing
//I record the time consuming of query & computing
while ( it.hasNext() ) {
String id = it.next().getKey();
stmt.setString(1, id); //set the missing param with id
long queryStart = System.currentTimeMillis();
ResultSet rs = st.executeQuery();
long queryEnd = System.currentTimeMillis();
while ( rs.next() ) {
//computing
}
rs.close();
st.clearParameters();
long computeEnd = System.currentTimeMillis();
System.out.println(index+" has done...");
System.out.println(" query time: "+ (queryEnd-queryStart));
System.out.println(" compute time: "+ (computeEnd-queryEnd));
}
大约100-200次循环的性能开始良好。 但它突然下降了。
在控制台窗口中打印的结果是:
1 has done...
query time: 0
compute time: 0
2 has done...
query time: 0
compute time: 0
3 has done...
...
...
191 has done...
query time: 1
compute time: 0
192 has done...
query time: 0
compute time: 1
193 has done...
query time: 1018
compute time: 0
194 has done...
query time: 1142
compute time: 0
195 has done...
query time: 1122
compute time: 0
我的数据库在localhost。 为什么会发生这种情况,哪些会对性能产生如此大的影响?
如何提高性能?
顺便说一句:对象语句,连接...在java.sql中定义,我没有使用com.mysql.jdbc版本,我不知道什么是deffernce。
一些有助于提高性能的提示:
您可以尝试在MYSQL Server配置中启用查询缓存吗? 同样请参考: mysql中的查询缓存
是否为此表设置了索引?
当你发出一个查询时,每次它通过网络并由db执行并返回给你。 为了减少此往返,您可以使用一堆id执行select查询。
如何编写如下的查询
从id为(id0,id1,.... idn)的用户中选择名称
编写一个方法来构造“id”子句并在语句中设置它并执行它。
如果id的数量很高,请逐批执行具有一组ID的相同查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.