2016-03-21 6 views
-1

Ich versuche, die Leistung von 2 Abfragen zu vergleichen, indem Sie eine Verbindung herstellen, die Anweisung vorbereiten und Abfrage ausführen. Erfassen der Zeit mit System.currentTimeMillis() vor und nach executeQuery().Statement.executeQuery nimmt die gleiche Zeit für jede SQL-Abfrage

Ironischer unabhängig von der Abfrage sein kann, Zeit genommen, immer gleich. (Die erste Ausführung Ignorieren)

Kann jemand bitte lassen Sie mich wissen, wie man die richtige Zeit von der Abfrage genommen bekommen auszuführen?

Code-Snippet:

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

Warum vorausgesetzt, Sie sind die Nummer, die Sie falsch verwenden sollte, ist? Aber Sie sollten auch das zurückgegebene 'ResultSet' konsumieren. Je nach JDBC-Treiber hat es möglicherweise die tatsächliche Ausführung verzögert, obwohl dies unwahrscheinlich ist. – Andreas

+0

Vielleicht nehmen Ihre beiden Abfragen die gleiche Zeit, weil der SQL-Ausführungsplan der gleiche ist? Wenn beide einen vollständigen Tabellenscan verursachen, erwarten Sie, dass sie die gleiche Zeit zum Ausführen benötigen. – Andreas

Antwort

0

Sie 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)); 

lesen Sie answer für weitere Informationen

Verwandte Themen