Mysql 将where子句移动到join子句是否会提高性能?

Mysql 将where子句移动到join子句是否会提高性能?,mysql,Mysql,我有一个运行缓慢的update语句,我很好奇将where条件移动到join子句是否会提高性能。问题是: update T1 inner join (select ID, GROUP_CONCAT(x) as X from T3 group by ID) as T2 on T1.ID=T2.ID set T1.X=T2.X where T1.TYPE='something'; 现在。。。对于一个有数百万条记录的非常大的表,这样做会更快吗 update T1 inner join (select

我有一个运行缓慢的update语句,我很好奇将where条件移动到join子句是否会提高性能。问题是:

update T1 inner join (select ID, GROUP_CONCAT(x) as X from T3 group by ID) as T2

on T1.ID=T2.ID set T1.X=T2.X where T1.TYPE='something';
现在。。。对于一个有数百万条记录的非常大的表,这样做会更快吗

update T1 inner join (select ID, GROUP_CONCAT(x) as X from T3 group by ID) as T2

on T1.ID=T2.ID and T1.TYPE='something' set T1.X=T2.X;

查询非常简单,两种方法都应该进行相同的优化

这两种方法也可能是次优的,因为内部查询与外部查询不相关。您的查询正在创建一个隐式临时表,其中包含派生表T2的所有可能行—结果完全相同,就好像您只是单独运行查询select ID,GROUP_CONCATx as X from T3 GROUP by ID—然后服务器将丢弃无法连接到T1的行,并使用其余行执行更新

这很可能不是最佳路径

除非t1.TYPE='something'涉及到t1中很大比例的行,否则这样做应该更有效:

UPDATE t1
   SET t1.x = (SELECT GROUP_CONCAT(x) FROM T3 WHERE T3.id = T1.id GROUP BY T3.id)
 WHERE t1.TYPE = 'something';

内部子查询与外部子查询相关,并且仅对T1中由WHERE子句匹配的行执行。

T1中有多少行的类型为'something'?T2中对应行的分数相同吗?对于T1中的每一行,T2中通常有多少行?