我有一个查询来获取用户朋友的数据。我有3个表,一个是用户表,第二个是user_friend表,它有user_id和friend_id(都是用户表的外键),第三个表是带有user_id和feed内容的feed表。饲料可以显示给朋友。我可以通过加入或使用IN
子句以两种方式进行查询(我可以通过图形数据库获取所有朋友'我用于网络)。
以下是两个问题:
SELECT
a.*
FROM feed a
INNER JOIN user_friend b ON a.user_id = b.friend_id
WHERE b.user_id = 1;
在此查询中,我从图形数据库中获取朋友ID并将传递给此查询:
SELECT
a.*
FROM feed a
WHERE a.user_id IN (2,3,4,5)
当我有数百万条记录时,哪个查询运行速度更快,性能更好?
答案 0 :(得分:0)
这取决于您在子查询中比较大数据时所需的结果,对于这些条件,它总是更喜欢连接。因为子查询可能比 LEFT [OUTER] JOINS / INNER JOIN [LEft JOIN比INNER JOIN快] 慢,但在我看来,他们的优势是可读性略高。
因此,如果您的数据比较少,那么您选择完整的表连接的原因取决于您拥有的数据量。
在我看来,如果您在 IN
中的比较数据的数量少于它的好,但如果您有子查询或大数据,那么您必须选择 join
强> ...
答案 1 :(得分:0)
使用合适的索引,单查询JOIN
(选择1)几乎总是比2查询(选择2)算法运行得快。
要优化选择1,b
需要此综合索引:INDEX(user_id, friend_id)
。另外,a
需要一个以PRIMARY KEY
开头的索引(大概是user_id
?)。