大Mysql加入

时间:2010-09-25 08:46:05

标签: mysql optimization join

假设每个表中有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更新第三张表是否合理?大量插入数据库会导致触发器工作缓慢,从而影响数据库性能吗?

3 个答案:

答案 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;
  • 在电影中保留用户ID的索引
  • 在歌曲名称中保留索引

答案 1 :(得分:0)

为什么不在电影用户标识上创建索引?因为它在你的WHERE子句中,它应该运行得更快。

答案 2 :(得分:0)

使用整数键,而不是字符串;在字符串比较检查之前还要移动userId(现在整数)检查。