2014-08-27 60 views
0

我想用Java連接到我的MySQL數據庫。下面是代碼:Java MySQL的查詢速度比預期慢

Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); 
java.sql.Statement stmt = connection.createStatement(); 
long startTime = System.currentTimeMillis(); 
stmt.execute("SELECT row_1, row_2, row_3, row_4 FROM dataset where row_5 is null and row_6 is null limit 100"); 
long endTime = System.currentTimeMillis(); 
System.out.println("That took " + (endTime - startTime) + " milliseconds"); 
ResultSet rs = stmt.getResultSet(); 
while (rs.next()) { 
    System.out.println(rs.getString("row_1")); 
} 
stmt.close(); 

表 '數據集' 是500萬行,並且索引的初級(row_1,row_2,row_3,row_4)和第二索引(row_5和row_6)。

未緩存,此查詢使用SequelPro for Mac(數據庫管理軟件)需要1.9 ms。但是,當我在Java中運行上面的代碼時,大約需要1800毫秒(未緩存)。請讓我知道,如果它只是Java很慢,或者我可以做一些事情來優化Java中的查詢,因爲它使用SequelPro或使用其他腳本語言可以很好地工作。

+1

當你在sequelPro中執行查詢時,你是否像在代碼中那樣考慮了連接數據庫的時間? – pedromarce 2014-08-27 09:51:34

+0

你如何測量時間? – 2014-08-27 09:52:11

+0

MySQL在Mac上運行速度較慢。嘗試使用linux(centos,ubuntu)製作虛擬機並在其上安裝mysql。 – Meiblorn 2014-08-27 09:53:35

回答

0

你是否將它作爲獨立程序的主要方法中的單個代碼單元執行?您應該意識到「冷」的jvm,這可能會對啓動性能產生較大影響。類似你(我)不知道java.sql.Statement.java的源代碼。我們不知道在執行查詢的任何時候是否會有成員的惰性初始化。在測量時間之前,您需要做一些處理,您可以使用不同的查詢來防止兌現。