Mysql Show On Unseen

时间:2014-10-25 04:43:25

标签: mysql

我正在开发一个照片共享应用程序,用户可以上传自己的图片并对其他人上传的图片进行投票/评论,在我们的应用中,我们希望实现一项功能,只向他们显示行从未见过,意味着一旦他们看到一张图片,就会从他们的Feed中删除。我们的图表非常简单

picture_id (int 255, PK) | picture_title (varchar 255)

跟踪视图的表是

view_id (255, PK) | picture_id (255) | user_id (255)

以前我们一直使用简单的NOT IN查询来实现这个结果

SELECT * FROM pictures where picture_id NOT IN (SELECT picture_id from views where user_id=255)

工作正常但由于我们的视图表已超过2000万行,查询需要很长时间准备状态,我正在寻找重写此查询或优化它的建议。

Thansk

1 个答案:

答案 0 :(得分:0)

使用JOIN

SELECT p.*
FROM pictures AS p
LEFT JOIN views AS v ON v.picture_id = p.picture_id AND v.user_id = 255
WHERE v.picture_id IS NULL

为了提高效率,请确保您在views.picture_id上有索引。