使用JOINS而不是子查询

时间:2013-06-01 17:42:06

标签: mysql sql join

我有一个使用子查询的简单查询:

SELECT pictures.*
FROM pictures
WHERE pictures.user_id IN
    (SELECT follows.following_id
     FROM follows
     WHERE follows.follower_id = 9)
ORDER BY created_at DESC LIMIT 5;

我在想, a)如何删除子查询并使用JOINS而b)使用JOINS而不是子查询会有性能优势吗?

(follow.following_id,follow.follower_id,pictures.user_id都已编入索引)

由于

1 个答案:

答案 0 :(得分:4)

SELECT  DISTINCT pictures.*
FROM    pictures
        INNER JOIN follows
            ON pictures.user_ID = follows.following_id
WHERE   follows.follower_id = 9
ORDER   BY pictures.created_at DESC 
LIMIT   5

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

<强>更新

获得相同结果的另一种方法是使用EXISTS

SELECT  *
FROM    pictures
WHERE   EXISTS
        (
            SELECT  1
            FROM    follows
            WHERE   pictures.user_ID = follows.following_id AND
                    follows.follower_id = 9
        )
ORDER   BY pictures.created_at DESC 
LIMIT   5