java - 优化MySQL更新查询

标签 java mysql optimization

这是当前我的 MySQL UPDATE 查询,它是从用 Java 编写的程序调用的:

String query = "UPDATE maxday SET DatePressureREL = (SELECT " + 
   "Date FROM ws3600 WHERE PressureREL = (SELECT MAX" +
   "(PressureREL) FROM ws3600 WHERE Date >= '" + Date + 
   "') AND Date >= '" + Date + "' ORDER BY Date DESC LIMIT 1), " +
   "PressureREL = (SELECT PressureREL FROM ws3600 WHERE " + 
   "PressureREL = (SELECT MAX(PressureREL) FROM ws3600 " +
   "WHERE Date >= '" + Date + "') AND Date >= '" + Date + 
   "' ORDER BY Date DESC LIMIT 1), ...";

try {
    s.execute(query);
} 
catch (SQLException e) {
    System.out.println("SQL error");
}
catch(Exception e) {
    e.printStackTrace();
}

我先解释一下,它有什么作用。我有两个表,第一个是 ws3600,它包含列(日期、压力REL、温度输出、露点...)。然后我有第二个表,称为 maxday,其中包含 DatePressureREL、PressureREL、DateTemperatureOUT、TemperatureOUT 等列。现在正如您从示例中看到的,我更新每一列,问题是,是否有更快的方法?我问这个问题是因为我调用 MAX 两次,首先查找该值的日期,其次查找实际值。现在我知道我可以这样写:

SELECT Date, PressureREL FROM ws3600 WHERE PressureREL = 
  (SELECT MAX(PressureREL) FROM ws3600 WHERE Date >= '" + 
  Date + "') AND Date >= '" + Date + "' 
ORDER BY Date DESC LIMIT 1

这样我可以同时获取最大值的日期和最大值,然后用这些值更新 maxday 表中的数据。但这个解决方案的问题是,我必须执行许多查询,据我所知,与执行一个长 mysql 查询相比,这需要更多的时间,因为将每个查询发送到服务器的开销。

如果没有更好的办法,我应该在这两者之间选择哪个解决方案。第一个只需要一个查询,但非常未优化,或者第二个在优化方面更好,但需要更多查询,这可能意味着由于将每个查询发送到服务器的开销而损失了性能增益? p>

最佳答案

进行 2 个查询对我来说并不是真正的问题,但它们应该在一个事务中(读取和写入),这样您就可以确保您的更新值没有错误。通过一次查询,您就不会遇到此问题。

我认为读取某些数据所损失的时间与执行写入操作所损失的时间无关。从定义上来说,写入操作并不是一件很快的事情,您可能有触发器,您可能会清空影响该表的所有请求的查询缓存,数据库需要同步磁盘上的写入,等等。

对您来说更重要的是保持流程简单、可读且符合逻辑。

关于java - 优化MySQL更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4695727/

相关文章:

java - 如何获取两个字符串或两个字符之间的多个字符串

mysql - 自动热键关闭数据库连接

MySQL SELECT 查询字符串中包含的字段值

mysql - 在两个不同的条件下选择一个计数

JavaScript Math.sqrt 性能

java - 在我的类的初始化程序中创建后,我的数组不会在所有函数中继承。出了什么问题吗?

java - 为什么 Gmail API ListThreadResponse get Threads 没有做任何事情?

python - SQLAlchemy 中关系的高效查询

java - Sqlite 按距离现在最近的时间排序

java - 优化Java中的128位序列按位运算