mysql - 大型Mysql连接

标签 mysql optimization join

假设我有 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/

相关文章:

php - 在本地 Wamp 上设置远程 WordPress 站点时出现问题

php - 多次插入/更新时出现唯一键异常

mysql - 组 HAVING 的使用无效

performance - 在哪里可以了解低级、核心性能的东西?

ios - 分离约束和 UI 元素(UIView、UIButton、UITextField 等)声明以分离 swift 文件

mysql - Left Join 返回比表 1 中更多的记录并添加额外的数据

MySQL 在工作台上运行良好的查询上出现错误

mysql - 内部加入 php redbeans

mysql - 加入 : Incorrect result when SUM() is used and only one record is displayed

c# - 如何优化此代码以获得更好的可读性?