大型Mysql连接
假设我有两个大表,每个表中有超过1000万行 表1是一个电影表,用户ID表示用户观看了这部电影,表2是一个音乐表,用户ID表示用户观看了这首歌 我想做的是,只要用户想知道是否有一首歌与他看过的电影同名,就可以运行查询 比如说大型Mysql连接,mysql,optimization,join,Mysql,Optimization,Join,假设我有两个大表,每个表中有超过1000万行 表1是一个电影表,用户ID表示用户观看了这部电影,表2是一个音乐表,用户ID表示用户观看了这首歌 我想做的是,只要用户想知道是否有一首歌与他看过的电影同名,就可以运行查询 比如说 SELECT movies.name FROM movies, music WHERE movies.name = music.name and movies.userID = '8a80828c2b46d717012b4801d2650002'; 我在两个表中都索引了电
SELECT movies.name FROM movies, music WHERE movies.name = music.name and movies.userID = '8a80828c2b46d717012b4801d2650002';
我在两个表中都索引了电影名和音乐名。问题是,当用户调用查询时,它似乎运行缓慢,这取决于表中有多少行以及用户观看/观看了多少电影/音乐
假设用户已观看了9000部电影,并录制了90k首歌曲。我将如何优化此查询以使其快速(最多不超过15秒)
编辑:对我来说,在每次观看电影后使用触发器去检查是否有歌曲存在,并用userID、movieID、musicID更新第三个表是否有意义?向数据库中插入的大量内容是否会导致触发器工作缓慢,进而影响数据库性能?为什么不在电影用户ID上创建索引?因为它在WHERE子句中,所以应该运行得更快。使用整数键,而不是字符串;还要在字符串比较检查之前移动userId(现在是整数)检查
select name from songs where name in (select name from movies where userid=5);
或
- 在电影中保留用户ID索引
- 在歌曲中保留名称索引
select s.name from songs s
join (select name from movies where userid=5) as m
on s.name = m.name;