我很好奇:数据库是否将JOIN
s 作为两个(或多个)SELECT
语句的结果返回,其中的指针从左侧的(段)行指向右侧的(段)行,或者它们是否返回可能包含的结果集左右两边的条目有多少份?
您可以想象这对于密集的 N:N 关系特别低效,其中左侧一行的 N 个副本可能与右侧的 N 个匹配配对,反之亦然。
您可以在客户端驱动程序中隐藏此优化,并使其对数据库用户完全透明。
编辑为了澄清,通过“密集的N:N关系”,我的意思是(对于“Facebook克隆”)你有一个“用户”表和一个“朋友”表,每个用户都是其他用户的朋友。您需要两个JOIN
s 才能将所有朋友对拉出,但可以将相同的信息作为三个SELECT
语句的结果传递给客户端,并让客户端使用指针匹配行,而不是实际复制每个用户 2(N-1)次(左边N-1次,右边N-1次)。