我正在开发一个照片共享应用程序,用户可以上传自己的图像并对其他人上传的图像进行投票/评论,在我们的应用程序中,我们希望实现一项功能,该功能只会向他们显示他们想要的行从未见过,意味着一旦他们看到某个图像,该图像就会从他们的动态中删除。我们的图片表非常简单
picture_id (int 255, PK) | picture_title (varchar 255)
跟踪 View 的表是
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)
工作正常,但由于我们的 View 表已超过 2000 万行,查询在准备状态下需要很长时间,我正在寻找重写此查询或优化它的建议。
谢谢
最佳答案
使用 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
上有一个索引。
关于Mysql 显示在看不见的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26559404/