如何有效地计算mysql上的事件

时间:2012-02-26 22:36:12

标签: mysql

我试图找出如何以最有效的方式做到这一点,因为我有大表。

我有两个表:photosfavorites(想想像Flickr或Facebook :-)。

对于每张照片P,我想要在她上传P之前计算P的创作者在她的照片上收到的收藏总数。换句话说,我想要一直计算收藏,直到她分享P

photos包含以下列:iduser_idupload_timestamp

表格favorites包含以下列:photo_iduser_id(用户偏好),fave_timestamp

结果集应包含以下列:photo_id, user_id (creator of the photo), pre_faves_count

photos表有200万条记录。 favorites有1000万条记录。

我尝试过像

这样的事情
select count(favorites) 
FROM favorites, photos 
WHERE favorites.photo_id 
  and photos.id 
  and favorites.fave_timestamp < photos.upload_timestamp 
group by favorites.photo_id, favorites.user_id 

- 但我很确定这不正确

1 个答案:

答案 0 :(得分:1)

这将是非常缓慢的。甚至不在2M和10M表上尝试,而不首先添加索引:

SELECT 
      p.id               AS photo_id
    , p.user_id          AS user_id
    , COUNT(f.photo_id)  AS pre_faves_count
FROM 
      photos AS p
  JOIN
      photos AS allp
          ON allp.user_id = p.user_id
  LEFT JOIN
      favorites AS f
          ON  f.photo_id = allp.id 
          AND f.fave_timestamp < p.upload_timestamp 
GROUP BY 
      p.id 
    , p.user_id