php - 加速/优化 MySQL 语句 - 查找之前未选择的新行
问题描述
首先是关于表和数据库的一些背景知识。
我有一个 MySQL 数据库,其中有几个表:
电影:包含所有以 netflixid 作为唯一主键的电影/系列信息。
users:包含用户信息“ratingid”是唯一的主键
rating:包含所有用户评分信息、netflixid 和复合“netflixid-userid”的唯一主键
该声明有效:
SELECT *
FROM films
WHERE
INSTR(countrylist, 'GB')
AND films.netflixid NOT IN (SELECT netflixid FROM rating WHERE rating.userid = 1)
LIMIT 1
但是检索您尚未评级的新电影记录需要越来越长的时间。(目前在 8000 行电影台上大约 2400 名用户评分为 6.8 秒)
首先,我认为它是 INSTR(countrylist, 'GB'),所以我将它们分成了自己的 tinyint 列 - 没有区别。我也尝试过NOT EXISTS,但时间相似。
关于如何快速从电影中选择新的“未分级”行有什么想法/想法吗?
谢谢!
解决方案
尝试加入?
SELECT *
FROM films
LEFT JOIN rating on rating.ratingid=CONCAT(films.netflixid,'-',1)
WHERE
INSTR(countrylist, 'GB')
AND rating.pk IS NULL
LIMIT 1
或者做等效的NOT EXISTS。
推荐阅读
- php - Atom 编辑器:如何为 php 以不同的方式突出显示单引号和双引号字符串
- express - 如何在猫鼬中添加多个模型?
- pine-script - 如何突出显示计算/值等于两个价格/水平之间的位置?
- uber-api - 无法在悉尼获得 UberPool
- python - 如何在python中为多个散点图制作一个循环?
- image - 如何更改图像中的像素值范围?
- javascript - 移动浏览器分享链接问题
- python - 在 python 3 中使用 pip 导入运行时安装的模块
- tensorflow - 多 GPU 推理张量流
- android - 如何在 Flutter 插件中获取 Android Activity 生命周期事件?