2015-01-09 28 views
0

我有下面的代碼工作:結合在MySQL 2個SUMS和優化查詢

SELECT admin_teams.name, 
SUM(temp_orders.amount_paid) as amount, 
SUM(instalments.amount) as amount2 
FROM temp_orders 
LEFT JOIN admin_teams 
ON admin_teams.id = temp_orders.team 
LEFT JOIN instalments 
ON instalments.order_id = temp_orders.order_id 
WHERE 
(DATE(temp_orders.date_paid) = CURDATE() 
OR DATE(instalments.date_paid) = CURDATE()) 
AND (temp_orders.pay_status = 4 
OR instalments.pay_status = 4) 
GROUP BY temp_orders.team 
ORDER BY temp_orders.team ASC 
LIMIT 5 

它產生一個表,看起來像:

+-------------+--------+---------+ 
| name  | amount | amount2 | 
+-------------+--------+---------+ 
| team name 1 | 100 |  150 | 
| team name 2 | 200 |  250 | 
| team name 3 | 300 |  175 | 
+-------------+--------+---------+ 

我有兩個問題;

  1. 我實際上只想要一個是金額和金額2的總和。
  2. 查詢非常慢 - 這需要190秒才能運行。

我確實有它幾乎與聯盟這幾乎是即時的工作 - 我不能然而讓它完全工作,因爲列在我的第一個SELECT語句的數量不會匹配在第二 - 表「分期付款「沒有團隊列,但表temp_orders可以。

任何人都可以幫助解決這兩個問題嗎?

謝謝。

+1

把一個'EXPLAIN'查詢之前和運行it.Edit的結果 – Mihai 2015-01-09 19:55:54

+0

一個朋友建議這但顯然服務器沒有建立你的問題解釋(我不明白爲什麼,顯然有些東西沒有安裝或沒有更新),我沒有訪問權限或知識來更新它。 – James 2015-01-09 19:59:00

+0

我從來沒有聽說過這樣的事情,EXPLAIN自帶mysql,沒有什麼需要更新 – Mihai 2015-01-09 20:03:53

回答

0
SELECT admin_teams.name, 
(SUM(temp_orders.amount_paid) + SUM(instalments.amount)) as amount, 
FROM temp_orders 
LEFT JOIN admin_teams 
ON admin_teams.id = temp_orders.team 
LEFT JOIN instalments 
ON instalments.order_id = temp_orders.order_id 
WHERE 
temp_orders.date_paid >= CURDATE() 
OR instalments.date_paid >= CURDATE()) 
AND (temp_orders.pay_status = 4 
OR instalments.pay_status = 4) 
GROUP BY temp_orders.team 
ORDER BY temp_orders.team ASC 
LIMIT 5 

並添加這些指標

ALTER TABLE temp_orders ADD KEY (date_paid ,pay_status,team); 
ALTER TABLE instalments ADD KEY (date_paid ,pay_status); 
+0

謝謝你的建議,我實際上無法親自進行修改,因此測試將不得不等到星期一。我已經嘗試過按照您所建議的方式合併列,這意味着它返回一列,但它不會給出正確的值。我不能更有幫助,因爲我實際上不知道它是如何檢索它顯示的值。 – James 2015-01-09 20:14:19