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

Mat*_*ati 1 php mysql database performance

我正在使用这样的查询:

SELECT * FROM videos WHERE id IN (SELECT video_id FROM videos_tags WHERE tag_id = 2)
Run Code Online (Sandbox Code Playgroud)

要搜索具有相同标签的视频,但是大约有8,000个视频,这个查询太慢了.如何更快地进行此查询?也许JOIN更快?像videos_tags中的select*之类的东西会加入视频(videos_tags.video_id = videos.id),其中videos_tags.tag_id = 2更快?

Joh*_*Woo 6

您可以替代使用JOIN子查询.

SELECT  DISTINCT a.*
FROM    videos a
        INNER JOIN video_tags b
            ON a.ID = b.video_ID
WHERE   b.tag_id = 2
Run Code Online (Sandbox Code Playgroud)

为了提高性能,请在video_tags引用的表上创建外键约束videos.示例,(确保它video.ID是主键或唯一键)

ALTER TABLE video_tags ADD CONSTRAINT vt_fk 
            FOREIGN KEY (video_ID) REFERENCES video(ID)
Run Code Online (Sandbox Code Playgroud)

要进一步了解联接,请访问以下链接: