MySQL - 使用另一个表中的最小日期更新表

时间:2015-01-12 15:28:29

标签: mysql

我有一个表格(table1),其中包含用户ID和交易日期(stt_stidstt_date)以及其他一些不相关的信息。

我有另一张表(table2),其中包含几百条记录,我需要根据min(stt_date)获取table1.stt_stid = table2.stid

table1是5M +行,我在编写有效连接时遇到问题而没有收到错误。

我尝试过以下方面:

UPDATE table2 JOIN (
    SELECT stt_stid,
           MIN(stt_date) AS mindate
      FROM table1
     WHERE stt_amt > 0
       AND stt_prid = 1
     GROUP BY stt_stid) temp
    ON table2.stid = table1.stt_stid
 SET table2.firstdate = temp.mindate

1 个答案:

答案 0 :(得分:1)

如果该内联视图查询应该引用table1,请确保已定义索引

ON table1 (stt_stid, stt_date)

这将允许MySQL使用索引来满足查询。如果MySQL不能使用索引来满足GROUP BY并获得最小值,那么在table1中的所有行上都需要“使用filesort”操作,这对于大型集合而言是昂贵的。 (MySQL可以使用合适的索引来避免该操作。)

内联视图查询的结果将实现为“派生表”,然后外部查询将运行。在MySQL 5.6之前,“派生表”上没有任何索引。

(我假设stid中几乎每个table1值也出现在table2中,也就是说,table2不包含非常小的子集stid值...如果不是这样,将JOIN移动到派生表中可能会显着减小派生表的大小。)