mysql - 无论记录是否存在,在与另一个表匹配后查询以更快地加载结果
问题描述
我有一张桌子叫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
表格进行比较,那么记录加载速度会更快。
解决方案
LEFT JOIN ... WHERE .. IS NULL
我在另一对桌子上试了试;它似乎明显更快。
还是ORDER BY RAND() LIMIT 10
没有优化好;它需要对video
.
以下是加速“随机 10”的一些替代方法:http: //mysql.rjweb.org/doc.php/random
推荐阅读
- sql - 是否可以选择将 2 列数据与分组数据分开
- vb.net - 如何在 vb.net 中的字典列表中检查值?
- r - 如何在进行置换测试时修复错误
- python - 在 Anaconda Prompt 中运行 Python 时出现 UnicodeDecodeError
- python - 循环超过6k结果,想更新链接表,担心耗时
- c# - Syncfusion Grid 添加按钮不触发
- javascript - 模拟 node.js 依赖原型方法
- java - Nano - 类是公共的,应该在一个名为的文件中声明
- sorting - 有人可以帮我理解鸽巢分类的概念吗?
- python - 从覆盖范围中跳过文件