我目前正在使用JHM基准的MySQL查询。对于这一点,我建立了使用JDBC与dockerized服务器的连接。
我的代码:
@Benchmark
public void testWithPreparedStatement(Blackhole bh) throws SQLException {
PreparedStatement st = connection.prepareStatement(query);
st.setString(1, "Parameter1");
st.setString(2, "Parameter2");
bh.consume(st.executeQuery());
connection.commit();
st.close();
}
这些测试的结果:
# Warmup Iteration 1: 2.318 ms/op
Iteration 1: 2.038 ms/op
Iteration 2: 1.972 ms/op
Iteration 3: 1.908 ms/op
Iteration 4: 2.000 ms/op
Iteration 5: 1.960 ms/op
Iteration 6: 1.939 ms/op
Iteration 7: 1.968 ms/op
Iteration 8: 1.959 ms/op
该查询包含多个联接和数据库中包含的数据,以便基准不应该这么低。
在DataGrip同样的查询结果是:
0 rows retrieved in 59ms (execution: 32ms, fetching: 27ms)
我曾尝试:
RESET QUERY CACHE
方法运行FLUSH TABLES
和@TearDown
@TearDown
到Level.Iteration
autoCommit
到false
结果使用JDBC的查询返回的是正确的,虽然因此被正确执行。
有任何想法吗?所有的帮助表示赞赏!
好像是有关使用TransactionLevel
的“问题”,一旦我切换到正常READ_COMMITTED
,我得到相同的时间值我Datagrip得到。
从PreparedStatement
我发现这proabably导致更快的执行时间,一个Statement
做“的SQL语句的预编译和DB-端缓存”。
所以慢的代码,我现在使用:
this SO answer