SQL查询,哪一个更充足?

时间:2014-05-01 14:58:56

标签: mysql sql database

我有一个包含三个表的数据库:

post
    user_id

friendship
    user_id
    friend_id
    status

我想选择其作者(user_id)是current_user的朋友的所有帖子

我想知道以下哪一项声明效率更高? (1是当前用户的id,2是作为朋友的代码)

1)

SELECT * FROM posts
         INNER JOIN friendships AS fs 
         ON fs.user_id=1 AND fs.friend_id=posts.user_id AND fs.status=2;

2)查询两次

SELECT id FROM friendships 
          WHERE user_id = 1 AND status = 2

#   Assuming get (1,2,3)

SELECT * FROM posts WHERE user_id IN (1,2,3)

谁能告诉我哪个更快?因为我没有足够的数据,所以我无法测试......

1 个答案:

答案 0 :(得分:1)

都不是。以您作为人类访问它们的顺序加入您的表:

SELECT p.*
FROM friendships f
JOIN posts p ON p.user_id = f.friend_id  
WHERE f.user_id = 1
AND f.status = 2

此处将使用基于WHERE子句的索引来查找friendships中的行,然后将使用这些行通过索引访问posts

确保posts.user_idfriendships.user_id上有索引。