[英]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.