簡體   English   中英

與子查詢的MySQL LEFT JOIN非常慢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM