試圖優化這個查詢,用corollated子查詢優化corollated子查詢
SELECT g.*, g.instaLikes + ( SELECT COUNT(*) FROM gallery_likes AS l WHERE l.gallery_id = g.id) AS likes
FROM gallery AS g
WHERE ( STATUS = 'approved')
ORDER BY g.moderated_at DESC , g.id ASC
的SELECT無子查詢是非常快的,當我嘗試LEFT更慢加入它。
SELECT g.*, (g.instaLikes + COUNT(l.id)) AS likes
FROM gallery AS g
LEFT JOIN gallery_likes AS l ON (g.id = l.gallery_id)
WHERE (STATUS = 'approved)
GROUP BY g.id
ORDER BY g.moderated_at DESC , g.id ASC
,這似乎是最快的是分別做了查詢,然後在PHP循環字段添加在一起,因爲我可以運行一次子查詢,而不是在畫廊n次的選項。
目前在gallery中有2000行,在gallery_likes中有15000行。我認爲我不需要優化,因爲這些數字看起來很低,但第一個查詢需要20-30秒,而LEFT JOIN需要100多秒!
謝謝 - 我已經遠離做一個子查詢,因爲我想它必須運行主查詢的每一行。這是一個很好的解決方法 - 查詢回到.04秒。 – dmorrow 2012-02-04 20:37:55