[英]MySQL LEFT JOIN with SUBQUERY is very slow
在此查詢中:
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
子查詢很快,但是左聯接非常慢,如何使其更快?
通過執行子查詢,該子查詢的結果將加載到內存中,而無需任何對索引的引用(例如主ID或外鍵等)。 這樣,在沒有任何索引的情況下完成ON
語句,這很慢。
您應該創建一個查詢,然后在tblA上加入tblB,然后對兩者的結果都進行group_concat。
我不確定根據您的示例得出的最終結果應該是什么,因此無法向您提供查詢。
查看您的代碼,您可以避免左聯接
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
為什么不沒有任何加入:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.