在此查询中:
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
子查询很快但左连接速度很慢 我怎样才能让它更快?
答案 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