1. 程式人生 > >mysql中高效查詢(left join 和 group by),前提是加了索引

mysql中高效查詢(left join 和 group by),前提是加了索引

mysql犧牲了group by來增加left join的速度(前提是加了索引)。

user表:10萬資料

例項1: 200秒左右

SELECT U.id, A.favorite_count FROM (SELECT id from user) U
LEFT JOIN (
  -- 點贊數
  SELECT favorite_by AS user_id, SUM(favorite_count) AS favorite_count
  FROM favorite
  GROUP BY favorite_by
)  A ON U.id=A.user_id
LEFT JOIN (
  -- 評論數量
  SELECT user_id, COUNT(*) AS comment_count
  FROM photo_comment
  GROUP BY user_id
) B ON U.id=B.user_id
例項2:1秒多
select uf.user_id , uf.favorite_count, COUNT(pc.id) as comment_count from (
select u.id as user_id , SUM(f.favorite_count) as favorite_count from (SELECT id from user) u 
LEFT JOIN favorite f on f.favorite_by = u.id  
GROUP BY u.id
) uf 
LEFT JOIN photo_comment pc on pc.user_id = uf.user_id
GROUP BY uf.user_id