首页 > 解决方案 > 无论记录是否存在,在与另一个表匹配后查询以更快地加载结果

问题描述

我有一张桌子叫video,还有另一张桌子叫watch_video. video 表包含所有带有发布这些视频的用户 ID 的视频 URL,以及watch_video观看这些视频的用户 ID。现在为了向我的用户显示独特的视频,而不是重复的视频,我查看 user_id 和 video_id 是否不存在于 watch_video 表中,然后显示结果,但这会减慢整体结果。有没有更好的处理方法?

SELECT *
FROM video AS `Video`
WHERE not exists (
    SELECT id
    FROM video_watch as VideoWatch
    WHERE `Video`.`id` = `VideoWatch`.`video_id`
      AND `VideoWatch`.`user_id` =$user_id
)
ORDER BY rand() ASC
LIMIT 10

如果我不将它与VideoWatch表格进行比较,那么记录加载速度会更快。

标签: mysql

解决方案


LEFT JOIN ... WHERE .. IS NULL我在另一对桌子上试了试;它似乎明显更快。

还是ORDER BY RAND() LIMIT 10没有优化好;它需要对video.

以下是加速“随机 10”的一些替代方法:http: //mysql.rjweb.org/doc.php/random


推荐阅读