使用SUBQUERY的MySQL LEFT JOIN非常慢

时间:2018-05-06 08:27:27

标签: mysql join subquery

在此查询中:

SELECT tblA.id FROM tblA 
LEFT JOIN (
        SELECT invid, max(id) as maxid, group_concat(testcase) as testgrp 
        FROM tblB 
        GROUP BY invid
        ) AS tblC ON tblC.invid = tblA.id 
LEFT JOIN  tblB on tblB.id = tblC.maxid 
WHERE 1 
GROUP BY tblA.id 

子查询很快但左连接速度很慢 我怎样才能让它更快?

3 个答案:

答案 0 :(得分:0)

通过执行子查询,该子查询的结果将加载到内存中,而不会引用索引(如主ID或外键等)。这样,ON语句在没有任何索引的情况下完成,这很慢。

您应该创建一个在tblA上加入tblB的查询,并对两者的结果执行group_concat。

我不确定您的最终结果应该基于您的示例,因此我无法为您提供查询。

答案 1 :(得分:0)

查看代码,可以避免左连接

SELECT tblC.id FROM (
        SELECT tblA.id, tblB.invid, max(tblB.id) as maxid, 
              group_concat(tblB.testcase) as testgrp 
        FROM  tblB 
        left  tblB ON  tblA.id  =  tblB.invid
        GROUP BY tblA.id, , tblB.invid
        ) AS tblC 
LEFT JOIN  tblB on tblB.id = tblC.maxid 

答案 2 :(得分:0)

为什么没有任何加入:

SELECT
    a.id,
    (SELECT max(b.id) FROM tblB as b WHERE b.invid = a.id) as maxid,
    (SELECT group_concat(b.testcase) FROM tblB as b WHERE b.invid = a.id) as testgrp 
FROM tblA as a
WHERE 1