假设每个表中有2个大表超过1000万行的大表。
表1是一个电影表,其中有一个用户ID表明用户看过这部电影,而表2是一个音乐表,其中有一个用户ID表明该用户是对这首歌进行了追踪。
我想要做的是,只要用户想知道是否有与他看过的电影同名的歌曲,就可以运行查询。
例如。
SELECT movies.name FROM movies, music WHERE movies.name = music.name and movies.userID = '8a80828c2b46d717012b4801d2650002';
我已在两个表中编制了电影名称和音乐名称的索引。问题是当用户调用查询时,看起来它会运行缓慢,具体取决于表中有多少行以及用户观看/放牧了多少电影/音乐。
假设用户观看了9000部电影和9000首歌曲。我如何才能快速优化此查询(最多15秒以下)?
编辑:在每部观看电影之后使用触发器去检查是否存在一首歌并使用userID,movieID,musicID更新第三张表是否合理?大量插入数据库会导致触发器工作缓慢,从而影响数据库性能吗?
答案 0 :(得分:1)
select name from songs where name in (select name from movies where userid=5);
OR
select s.name from songs s
join (select name from movies where userid=5) as m
on s.name = m.name;
答案 1 :(得分:0)
为什么不在电影用户标识上创建索引?因为它在你的WHERE子句中,它应该运行得更快。
答案 2 :(得分:0)
使用整数键,而不是字符串;在字符串比较检查之前还要移动userId(现在整数)检查。