Statement.executeQuery 为每个 SQL 查询花费相同的时间
Posted
技术标签:
【中文标题】Statement.executeQuery 为每个 SQL 查询花费相同的时间【英文标题】:Statement.executeQuery taking same amount of time for every SQL query 【发布时间】:2016-03-21 18:00:32 【问题描述】:我试图通过获取连接、准备语句和执行查询来比较 2 个查询的性能。
捕获使用System.currentTimeMillis()
在executeQuery()
之前和之后所花费的时间。
具有讽刺意味的是,无论查询是什么,花费的时间总是相同的。(忽略第一次执行)
有人可以告诉我,如何获得查询执行的正确时间吗?
代码sn-p:
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));
【问题讨论】:
你为什么认为你得到的数字是错误的?但是,可以肯定的是,您还应该使用返回的ResultSet
。根据 JDBC 驱动程序,它可能会推迟实际执行,尽管这不太可能。
可能因为SQL执行计划相同,你的两个查询耗时相同?如果两者都导致全表扫描,您预计它们会花费相同的时间来运行。
【参考方案1】:
你应该使用 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 了解更多信息
【讨论】:
以上是关于Statement.executeQuery 为每个 SQL 查询花费相同的时间的主要内容,如果未能解决你的问题,请参考以下文章
无法从 Statement.executeQuery() 中获取选定的列
Can not issue data manipulation statements with executeQuery()的解决方案
StatementPreparedStatemntCallableStatement