繁体   English   中英

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

[英]MySQL - Update table with min date from another table

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

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

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

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

ON table1 (stt_stid, stt_date)

这将允许MySQL利用索引来满足查询。 如果MySQL无法使用索引来满足GROUP BY并获得最小值,则将需要对table1所有行执行“使用文件排序”操作,这对于大型集合而言是昂贵的。 (MySQL可以利用合适的索引来避免该操作。)

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

(我假设table1中几乎所有的stid值也都出现在table2 ,也就是说, table2不包含很小的stid值子集...如果不是这种情况,请将JOIN移到派生表中可能会大大减小派生表的大小。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM