[英]MySQL - Update table with min date from another table
我有一个表( table1
),其中包含用户ID和交易日期( stt_stid
, stt_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.