假设我有 2 个大表,每个表中有超过 1000 万行。
表 1 是一个电影表,其中的 userID 表明用户观看了这部电影,表 2 是一个音乐表,其中的 userID 表明用户喜欢这首歌曲。
我想要做的是,只要用户想知道是否有一首歌曲与他看过的电影同名,就能够运行查询。
例如。
SELECT movies.name FROM movies, music WHERE movies.name = music.name and movies.userID = '8a80828c2b46d717012b4801d2650002';
我已在两个表中索引了电影名称和音乐名称。问题是,当用户调用查询时,它似乎会运行缓慢,具体取决于表中的行数以及用户观看/观看的电影/音乐的数量。
假设用户观看了 9000 部电影并收藏了 90k 首歌曲。我该如何优化这个查询以使其更快(最多 15 秒以下)?
编辑:对我来说,在每次观看电影后使用触发器来检查是否存在歌曲并使用 userID、movieID、musicID 更新第三个表是否有意义?数据库中的大量插入是否会导致触发器工作缓慢从而影响数据库性能?
最佳答案
select name from songs where name in (select name from movies where userid=5);
或者
select s.name from songs s
join (select name from movies where userid=5) as m
on s.name = m.name;
- 在电影中的用户 ID 上保留索引
- 对歌曲中的名称保留索引
关于mysql - 大型Mysql连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3793098/