簡體   English   中英

Java / MySQL的/慢

[英]java / mysql / slow

這里要指出的是:

1.SET query_cache_type = 0; 重置查詢緩存;

2.在heidisql(或任何其他客戶端UI)中運行任何查詢->執行,例如45毫秒

3.使用以下代碼運行相同的查詢->執行說120毫秒。 並且差異與其他查詢成指數增長

4.添加/刪除的內容根本沒有幫助注釋

      long sql_execution_time = 0;
      String url = "jdbc:mysql://my.net:3306/test";

      Class.forName("com.mysql.jdbc.Driver").newInstance();

      Properties props = new Properties();
      props.setProperty("user", "root");
      props.setProperty("password", "pwd");

      //kao not recomended
      //http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html
      //props.setProperty("autoReconnect", "true");

      props.setProperty("characterEncoding", "UTF-8");
      //props.setProperty("useReadAheadInput", "true");
      //props.setProperty("SelectMethod", "direct");
      //props.setProperty("responseBuffering", "adaptive");



      Connection con = DriverManager.getConnection(url,props);
      String sql = "select g.*,t.id_tezaver_obfuscated,group_concat(t.data_source) as taxonomy_src,substring_index(group_concat(t.term order by t.eunis ),',',1) as term,(select count(t2.term) from tezaver t2 where t2.id_tezaver = g.id_tezaver and t2.l2 <> 'la') as c from galery_1 g left join tezaver t on g.id_tezaver = t.id_tezaver and t.l2 = 'la'  where 1 = 1 group by  g.id_galery  order by g.id_galery asc limit 0,18;";

      //java.sql.Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
      java.sql.Statement stm = con.createStatement();



      Calendar cal = Calendar.getInstance();
      long startTime = cal.getTimeInMillis(); 

      ResultSet rs = stm.executeQuery(sql);


      Calendar cal1 = Calendar.getInstance();
      long endTime = cal1.getTimeInMillis();
      sql_execution_time = endTime - startTime;
      long krneki = sql_execution_time;
      startTime = endTime;
      stm.close();
      con.close();
      result = String.valueOf(sql_execution_time);

重要的是要了解您的Java代碼不只是執行查詢。 它也在做其他一些事情;

  • 加載mysql驅動程序
  • 打開連接
  • 創建一些對象

您正在安排整個過程,而不僅僅是查詢的執行。 用戶界面的行為可能有所不同。 可能只是計時查詢執行所需的時間。

在性能方面進行比較是不合邏輯的。

1.System.currentTimeMillis()不會更改任何內容。2。jvm重新啟動后,是相同的內容。3.示例:

兩個sql,heidisql 0.093秒,java 0,9秒(調用存儲的proc,所以沒有2個調用)

在頁面底部查看計時

選擇g。*,t.id_tezaver_obfuscated,group_concat(t.data_source)作為分類法src,SUBSTRING_INDEX(group_concat(t.term按t.eunis排序),',',1)作為術語,(從中選擇count(t2.term) tezaver t2,其中t2.id_tezaver = g.id_tezaver和t2.l2 <>'la'),如從galery_1 g離開的c一起,在g.id_tezaver = t.id_tezaver和t.l2 ='la'上加入tezaver t,其中1 = 1組由g.id_galery排序由g.id_galery desc LIMIT限制0,18; SELECT FOUND_ROWS();

3.加載mysql驅動程序-例如,在現實世界中,不計算錐度的連接不起作用,cnonection打開-它已經打開,一些對象-mybe。

暫無
暫無

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

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