douwen7603 2013-05-17 13:45
浏览 144
已采纳

MySQL WHERE IN(SELECT id from ...)最快的方法?

I am using a query like this:

SELECT * FROM videos WHERE id IN (SELECT video_id FROM videos_tags WHERE tag_id = 2)

to search videos with the same tags, but with about 8'000 videos this query is too slow. How can I make this query faster? Maybe a JOIN is faster? Something like select * from videos_tags left join videos on (videos_tags.video_id = videos.id) where videos_tags.tag_id = 2 is faster?

  • 写回答

2条回答 默认 最新

  • dongzhanjuan5141 2013-05-17 13:46
    关注

    You can alternative use JOIN instead of subquery.

    SELECT  DISTINCT a.*
    FROM    videos a
            INNER JOIN video_tags b
                ON a.ID = b.video_ID
    WHERE   b.tag_id = 2
    

    For faster performance, create a foreign key constraint on video_tags table which references on videos. Example, (make sure that video.ID is a Primary Key or a Unique Key)

    ALTER TABLE video_tags ADD CONSTRAINT vt_fk 
                FOREIGN KEY (video_ID) REFERENCES video(ID)
    

    To further gain more knowledge about joins, kindly visit the link below:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建