我试图找出如何以最有效的方式做到这一点,因为我有大表。
我有两个表:photos
和favorites
(想想像Flickr或Facebook :-)。
对于每张照片P,我想要在她上传P之前计算P的创作者在她的照片上收到的收藏总数。换句话说,我想要一直计算收藏,直到她分享P
表photos
包含以下列:id
,user_id
,upload_timestamp
。
表格favorites
包含以下列:photo_id
,user_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
- 但我很确定这不正确
答案 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