2012-08-10 83 views
0

我有兩個表,一個存放用戶信息(id,名稱等),另一個存放用戶票證和票證狀態(ticket_id,user_id,ticket_status等)。MySQL將兩個查詢合併到一個組中

我想生產的所有用戶,例如列表:(SELECT * FROM user_table)

而對於我需要的,例如他們的票的數量每個用戶: (SELECT t1.user_id, COUNT(*) FROM user_tickets t1 WHERE t1.ticket_status = 15 GROUP BY t1.ticket_status, t1.user_id)

我能做到這一點查詢,實現什麼我正在尋找,但需要5秒。在50000票據上運行查詢,而每個單獨運行的查詢只需要幾分之一秒。

SELECT t1.user_id, COUNT(*) 
FROM user_tickets t1 
LEFT JOIN user_table t2 ON t1.user_id = t2.id 
WHERE t2.group_id = 20 AND t1.status_id = 15 
GROUP BY t1.status_id, user_id 

任何想法如何編寫查詢以獲得相同的性能,每個分別?

+5

where和join子句中所有字段的索引是通常的第一步。 – 2012-08-10 18:02:09

+1

也嘗試在查詢前添加EXPLAIN以查明mysql正在做什麼 - 發佈解釋的結果也是有用的 – 2012-08-11 01:28:43

+0

備註:'t2.group_id = 20'應該在您的左連接的ON子句中 – Sebas 2012-08-11 01:40:31

回答