Javaで書かれた大量のクエリを必要とするプログラムがあり、mysql dbを操作するためにJDBCが選択されています。私のコードのフレームは次のとおりです。
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 バージョンを使用していません。定義がわかりません。