簡體   English   中英

對於重復查詢,JDBC for mysql的性能非常慢

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

一些有助於提高性能的提示:

  1. 您可以嘗試在MYSQL Server配置中啟用查詢緩存嗎? 同樣請參考: mysql中的查詢緩存

  2. 是否為此表設置了索引?

當你發出一個查詢時,每次它通過網絡並由db執行並返回給你。 為了減少此往返,您可以使用一堆id執行select查詢。

如何編寫如下的查詢

從id為(id0,id1,.... idn)的用戶中選擇名稱

編寫一個方法來構造“id”子句並在語句中設置它並執行它。

如果id的數量很高,請逐批執行具有一組ID的相同查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM