gpt4 book ai didi

mysql - JDBC 和 Hibernate 查询性能缓慢(与 PhpMyAdmin 相比)

转载 作者:行者123 更新时间:2023-11-29 10:55:21 25 4
gpt4 key购买 nike

我正在开发 Spring MVC/Hibernate Web 应用程序,数据库查询非常慢。我已经搜索过,但是人们在这里询问的性能问题似乎都不符合我的问题(建议包括模型映射或连接池的问题)。

无论我使用普通 JDBC 还是 Hibernate 来查询数据库,都需要同样的时间。为了确保它与 Spring 框架无关,我编写了这个简单的应用程序:

public class JDBCTest {

static final String JDBC_DRIVER = ...;
static final String DB_URL = ...;
static final String USER = ...;
static final String PASS = ...;

public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
double time;
try {
Class.forName("com.mysql.jdbc.Driver");
start = System.currentTimeMillis();
conn = DriverManager.getConnection(DB_URL,USER,PASS);
System.out.println("Conn. duration: " + (System.currentTimeMillis() - start));
stmt = conn.createStatement();
String sql = "SELECT * FROM temperature WHERE SensorId = 1 AND metered >= '2016-09-15 14:00:00' AND metered <= '2016-09-16 20:00:00'";
start = System.currentTimeMillis();
ResultSet rs = stmt.executeQuery(sql);
System.out.println("Query duration: " + (System.currentTimeMillis() - start));
...

虽然打开连接需要 200-300 毫秒(似乎合理),但查询需要 1500-2000 毫秒。

在 PHPMyAdmin 中执行相同的查询时,它说查询花费了 0.0312 秒(与 JDBC 的 >1 秒相比)。

可能是什么问题?无论它是如上所示的简约 JDBC 应用程序、使用 JDBC 的 Spring 应用程序还是使用 Hibernate - 查询总是花费大致相同的时间。

这似乎也与时间戳无关,因为即使是简单的“SELECT * FROM temp”查询也比 PHPMyAdmin 慢很多倍。

最佳答案

对于那个查询,这个复合索引是最佳的:

INDEX(SensorId, metered)

为什么查询第二次运行得更快?通常是因为缓存。或者可能是一个驱动程序增量地获取行;另一个立即获得所有这些。

如果您想进一步讨论,请提供SHOW CREATE TABLEEXPLAIN SELECT ...;

关于mysql - JDBC 和 Hibernate 查询性能缓慢(与 PhpMyAdmin 相比),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43119119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com