这是目前我的MySQL UPDATE查询,这是从用Java编写的程序中调用:优化的MySQL更新查询
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,它包含了列(Date,PressureREL,TemperatureOUT,露点,...)。然后我有第二个表,名为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 – 2011-01-14 21:45:00
关于第二条日期,我特地到一些Serinus指出,来到一后我可能不需要这样的结论,因为我用DESC LIMIT 1限制了结果。它只是没有第二个子句而没有DESC LIMIT 1,它将返回与整个表中MAX值相等的所有值,而不仅仅是那些受参数Date限制的人。不过,我想知道我的问题真正的答案。 – 2011-01-14 22:12:38