【问题标题】:Java MySQL query slower than expectedJava MySQL 查询比预期慢
【发布时间】:2014-08-27 09:48:31
【问题描述】:

我正在尝试使用 Java 连接到我的 MySQL 数据库。代码如下:

Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
java.sql.Statement stmt = connection.createStatement();
long startTime = System.currentTimeMillis();
stmt.execute("SELECT row_1, row_2, row_3, row_4 FROM dataset where row_5 is null and row_6 is null limit 100");
long endTime = System.currentTimeMillis();
System.out.println("That took " + (endTime - startTime) + " milliseconds");
ResultSet rs = stmt.getResultSet();
while (rs.next()) {
   System.out.println(rs.getString("row_1"));
}
stmt.close();

表“数据集”有 500 万行,并在主索引(row_1、row_2、row_3、row_4)和第二个索引(row_5 和 row_6)上建立索引。

未缓存,此查询使用 SequelPro for Mac(数据库管理软件)需要 1.9 毫秒。但是,当我在 Java 中运行上面的代码时,大约需要 1800 毫秒(未缓存)。请让我知道是 Java 速度慢还是我可以做些什么来优化 Java 中的查询,因为使用 SequelPro 或使用其他脚本语言可以很好地工作。

【问题讨论】:

  • 当您在 sequelPro 中执行查询时,您是否像在代码中那样考虑了与数据库的连接时间?
  • 你如何衡量时间?
  • MySQL 在 mac 上运行速度较慢。尝试用linux(centos, ubuntu)制作虚拟机并在上面安装mysql。
  • @Pedromarce - 是的,我只计时了 stmt.execute() 行。
  • @KarolS - 我使用 System.currentTimeMillis(); 测量时间; (见编辑代码)

标签: java mysql sql


【解决方案1】:

您是否将其作为独立程序在主方法中的单个代码单元执行?您应该注意“冷”jvm,这可能会导致强烈的启动性能影响。类似的你(我)不知道java.sql.Statement.java的源代码。我们不知道在执行查询时是否随时可能对成员进行延迟初始化。你在测量时间之前做一些处理,你可以使用不同的查询来防止兑现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2015-07-26
    • 2011-09-20
    • 1970-01-01
    • 2015-01-03
    • 2020-10-31
    • 2015-02-21
    相关资源
    最近更新 更多