這次我遇到的項目中有這樣一個數據庫設計,下圖是日記表和收藏表。
然後需要利用日記表對收藏表中對應的收藏進行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函數使用的要求。我們查看一下對應的效率。
這樣我會發現對應的一些一些效率上的增加。