mysql利用一張表對另一張表進行統計(一對一count),及優化思考

這次我遇到的項目中有這樣一個數據庫設計,下圖是日記表和收藏表。

然後需要利用日記表對收藏表中對應的收藏進行count。

第一次寫出來的sql如下:

SELECT
	food_diary.*,
	( SELECT count( collect.diary_id ) FROM collect WHERE food_diary.id = collect.diary_id ) AS countNum 
FROM
	food_diary

這樣就能獲取對應的數據了。但是我們看一下對應的sql查詢性能分析。

EXPLAIN	SELECT
	food_diary.*,
	( SELECT count( collect.diary_id ) FROM collect WHERE food_diary.id = collect.diary_id ) AS countNum 
FROM
	food_diary

然後是第二種方法:

SELECT
	food_diary.*,
	count( collect.diary_id ) 
FROM
	food_diary
	LEFT JOIN collect ON food_diary.id = collect.diary_id 
GROUP BY
	food_diary.id;

 這樣同樣能獲取對應的數據,只是需要注意mysql對count函數使用的要求。我們查看一下對應的效率。

這樣我會發現對應的一些一些效率上的增加。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章