代码之家  ›  专栏  ›  技术社区  ›  Faisal Abid

大型Mysql连接

  •  0
  • Faisal Abid  · 技术社区  · 14 年前

    我想做的是,只要用户想知道是否有一首歌与他看过的电影同名,就可以运行一个查询。

    SELECT movies.name FROM movies, music WHERE movies.name = music.name and movies.userID = '8a80828c2b46d717012b4801d2650002';
    

    我在两个表中都索引了电影名和音乐名。问题是,当用户调用查询时,根据表中有多少行以及用户观看/观看了多少电影/音乐,它似乎运行得很慢。

    假设用户已经观看了9000部电影,并拥有9万首歌曲。我该如何优化这个查询以使其速度更快(最多不超过15秒)?

    编辑:在每次观看电影后使用触发器检查是否存在歌曲,并用userID、movieID、musicID更新第三个表,这对我来说有意义吗?大量插入数据库是否会导致触发器工作缓慢,进而影响数据库性能?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Muhammad Hasan Khan    14 年前
    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;
    
    • 在歌曲中保留名字索引
        2
  •  0
  •   Benoit    14 年前

    为什么不在电影用户ID上创建一个索引呢?因为它在WHERE子句中,所以应该运行得更快。

        3
  •  0
  •   vulkanino    14 年前