Mysql 显示在看不见的地方

标签 mysql

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

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/

相关文章:

mysql - 缓冲区溢出 SQL 注入(inject)是如何发生的?

mysql - 如何使用 Mysql 从多行中获取多个平均值

mysql - 跨列和行计算值的实例

php - Elasticsearch Not 运算符不起作用

mysql - SQL 选择 -> 产品 -> 评论 -> 用户

mysql - 从具有 2 个条件的表中删除不需要的行

mysql - 查询多个表

mysql - Rails/MySQL 查询连接多个表时获取计数

mysql 错误!使用brew安装时服务器退出而不更新PID文件

mysql - 如何从不同的表中选择值?