2016-03-21 123 views
-1

我試圖通過獲取連接來比較2個查詢的性能,準備語句並執行查詢。 在executeQuery()之前和之後捕獲使用System.currentTimeMillis()所花費的時間。Statement.executeQuery爲每個SQL查詢花費相同的時間量

具有諷刺意味的任何可能的查詢,所用的時間也都一樣。(忽略第一個執行)

可有人請讓我知道,怎樣才能通過查詢來執行所採取的正確的時間?

代碼片段:

Connection conn = DriverManager.getConnection(url,"721junits","721junits"); 
Statement stmt = conn.createStatement(); 
ResultSet rs; 
long startTime = System.currentTimeMillis(); 
rs = stmt.executeQuery(sql); 
long endTime = System.currentTimeMillis(); 
conn.close(); 

System.out.println("Total time taken : "+ (endTime - startTime)); 
+0

你爲什麼要假設你得到的數字是錯誤的?但是,可以肯定的是,你也應該使用返回的ResultSet。取決於JDBC驅動程序,它可能推遲了實際執行,儘管這不太可能。 – Andreas

+0

也許你的兩個查詢需要相同的時間,因爲SQL執行計劃是相同的?如果兩者都導致全表掃描,你會希望他們花費相同的時間來運行。 – Andreas

回答

0

你應該使用system.nanoTime()

Connection conn = DriverManager.getConnection(url,"721junits","721junits"); 
Statement stmt = conn.createStatement(); 
ResultSet rs; 
long startTime = System.nanoTime(); 
rs = stmt.executeQuery(sql); 
long endTime = System.nanoTime(); 
conn.close(); 

System.out.println("Total time taken : "+ (endTime - startTime)); 

閱讀本answer更多信息