我有一个包含三个表的数据库:
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)
谁能告诉我哪个更快?因为我没有足够的数据,所以我无法测试......
答案 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_id
和friendships.user_id
上有索引。