2014-11-24 16 views
0
SELECT applicant.id, applicant.firstname, applicant.lastname, applicant.state, applicant.mobile, applicant.lead_description, GROUP_CONCAT(note.note SEPARATOR ', ') as notes 
FROM applicant LEFT JOIN 
    note 
    ON applicant.id = note.applicant_id 
WHERE delete_type = 0 AND applicant.type = 0 
GROUP BY applicant.id 
ORDER BY applicant.id DESC 

結果對於2個表格來說太慢了。左連接的Group_Concat正在變慢。我需要左表中的所有行以及

回答

0

這是您的查詢:

SELECT a.id, a.firstname, a.lastname, a.state, a.mobile, a.lead_description, 
     GROUP_CONCAT(n.note SEPARATOR ', ') as notes 
FROM applicant a LEFT JOIN 
    note n 
    ON a.id = n.applicant_id 
WHERE delete_type = 0 AND a.type = 0 
GROUP BY a.id 
ORDER BY a.id DESC 

你應該使用索引開始。我會推薦applicant(type, id)note(applicant_id)。其中一個包括delete_type(我不知道它來自哪個表)。

其次,使用相關子查詢可能會更快。這看起來像:

SELECT a.id, a.firstname, a.lastname, a.state, a.mobile, a.lead_description, 
     (select GROUP_CONCAT(n.note SEPARATOR ', ') 
     from note n 
     where a.id = n.applicant_id 
     ) as notes 
FROM applicant a 
WHERE delete_type = 0 AND a.type = 0 
ORDER BY a.id DESC 

條件上delete_type無論是在外部查詢或子查詢老話 - 目前尚不清楚這來自哪個表從。

這可以避免外部數據上的大型group by,這可以提高性能。

+0

非常感謝。這個查詢解決了時間問題 – 2014-11-24 12:21:13

+0

子查詢如何使用索引,在這個解決方案中,mysql的說明中沒有使用註釋表的索引..我有一個applicant_id索引被添加.....任何想法? – 2016-02-07 20:50:45

+0

@AbdulRahmanMohsen。 。 。也許如果表格非常小​​,MySQL不會爲索引而煩惱。 – 2016-02-07 21:55:49