我经常读到图 dbms 非常适合社交网络。例如,instagram 或 linkedin 上的关注者。我读到如果查询涉及多个连接,SQL dbms 性能会降低,特别是如果连接的表很大。
SQL 数据库在连接下可能表现不佳的确切原因是什么?假设该followers
表在两个外键上都建立了索引。
查询:
SELECT DISTINCT f2.followed_id
FROM followers f1
JOIN followers f2 ON f1.followed_id = f2.follower_id
WHERE f1.follower_id = 4;
查询的执行计划:
HashAggregate (cost=253.84..257.23 rows=339 width=8)
Group Key: f2.followed_id
-> Nested Loop (cost=0.84..253.00 rows=339 width=8)
-> Index Only Scan using followers_pkey on followers f1 (cost=0.42..16.22 rows=19 width=8)
Index Cond: (follower_id = 4)
-> Index Only Scan using followers_pkey on followers f2 (cost=0.42..12.27 rows=19 width=16)
Index Cond: (follower_id = f1.followed_id)
所以我认为执行计划并没有表明没有完成复杂的操作。我读到的一件事是,在连接表时,数据库引擎需要在两个表中搜索匹配的行并将它们组合成一个结果集。这就是性能不佳的原因吗?
或者也许我错过了其他一些有效的观点?