2013-05-17 49 views
0

我有以下的MySQL查詢。如何使用SUM優化MySQL查詢(條件)

SELECT user_id 
     SUM(reached = 'Y') AS reached_count, 
     SUM(reached = 'N') AS not_reached_count 
    FROM goals 
GROUP BY user_id 

在表目標中,我有大約200萬條目。該查詢大約需要45秒才能執行。

沉重的部分似乎是SUM(reached = 'Y')這是很長的。我COUNT(*)這的確是更快相比,但Y和N之間沒有區別

編輯:reached的類型是ENUM('Y','N')

回答

0

重的部分是GROUP BY user_id特別是如果你有很多用戶,這樣我建議加上ORDER BY NULL這將有助於一點,你可以閱讀更多here

2

嘗試user_id, reached添加索引,然後嘗試查詢:

SELECT user_id, reached, count(*) 
FROM goals 
GROUP BY user_id, reached 
+0

+1這是如此明顯,我錯過了...如果他想要數據pivoted他可以做到這一點使用這作爲子查詢 – Stephan

+0

已經嘗試過,但這個查詢是更慢某種程度上。我在這兩個領域創建了索引。 – Aley