首页 > 解决方案 > 加速/优化 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,但时间相似。

关于如何快速从电影中选择新的“未分级”行有什么想法/想法吗?

谢谢!

标签: phpmysqlsqlperformancequery-optimization

解决方案


尝试加入?

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。


推荐阅读