我正在开发一个照片共享应用程序,用户可以上传自己的图片并对其他人上传的图片进行投票/评论,在我们的应用中,我们希望实现一项功能,只向他们显示行从未见过,意味着一旦他们看到一张图片,就会从他们的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
答案 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
上有索引。