MySQL的JDBC查询速度远远超过它应该是在江铃控股测试

问题描述 投票:0回答:1

我目前正在使用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
  • 设置@TearDownLevel.Iteration
  • 设置qazxsw POI到qazxsw POI和手动提交查询(见:代码)+设置autoCommitfalse

结果使用JDBC的查询返回的是正确的,虽然因此被正确执行。

有任何想法吗?所有的帮助表示赞赏!

java mysql jdbc benchmarking jmh
1个回答
0
投票

好像是有关使用TransactionLevel的“问题”,一旦我切换到正常READ_COMMITTED,我得到相同的时间值我Datagrip得到。

PreparedStatement我发现这proabably导致更快的执行时间,一个Statement做“的SQL语句的预编译和DB-端缓存”。

所以慢的代码,我现在使用:

this SO answer
© www.soinside.com 2019 - 2024. All rights reserved.