2012-09-21 54 views
2

,我有以下結構的腳本:MySQL的嵌套SELECT太慢

SELECT SUM(CASE WHEN pf.info IS NOT NULL THEN 1 ELSE 0 END) 
FROM summary s 
LEFT JOIN (SELECT id, info FROM items GROUP BY id) pf ON s.id=pf.id 
GROUP BY s.date 

我想是計算那些ID的這是在「摘要」,並出現在「項目」。 'items'有相同的id重複多次,這就是爲什麼我做GROUP BY。

這個腳本按我的意思工作,但速度非常慢,比直接執行LEFT JOIN(以及多次計數每個ID)要慢得多。這似乎沒有意義,因爲我需要一個更小的子空間,它應該更容易。

所以問題是:如何重構查詢,使其更快?

+0

'SELECT id,info FROM items GROUP BY id' ---這個查詢選擇了什麼'info'?如果某個特定的'id'有幾個信息呢? – zerkms

回答

3

使用count(distinct ...)

SELECT count(distinct s.id) 
FROM summary s 
JOIN items i ON s.id = i.id 


我不明白爲什麼你被s.date分組 - 有在,爲什麼,所以如果它不是一個錯誤,你的問題不知道你的需要組date,使用這個:

SELECT s.date, count(distinct s.id) 
FROM summary s 
JOIN items i ON s.id = i.id 
GROUP BY s.date 
+0

此查詢不完全相同。在原始查詢中,結果集中可能有幾行具有相同的's.id' – zerkms

+0

@zerkms,那麼它不是「id」。我敢打賭,這是一個關鍵。 – Bohemian

+0

好,點了。 +1 – zerkms