1

我很好奇:数据库是否将JOINs 作为两个(或多个)SELECT语句的结果返回,其中的指针从左侧的(段)行指向右侧的(段)行,或者它们是否返回可能包含的结果集左右两边的条目有多少份?

您可以想象这对于密集的 N:N 关系特别低效,其中左侧一行的 N 个副本可能与右侧的 N 个匹配配对,反之亦然。

您可以在客户端驱动程序中隐藏此优化,并使其对数据库用户完全透明。

编辑为了澄清,通过“密集的N:N关系”,我的意思是(对于“Facebook克隆”)你有一个“用户”表和一个“朋友”表,每个用户都是其他用户的朋友。您需要两个JOINs 才能将所有朋友对拉出,但可以将相同的信息作为三个SELECT语句的结果传递给客户端,并让客户端使用指针匹配行,而不是实际复制每个用户 2(N-1)次(左边N-1次,右边N-1次)。

4

1 回答 1

1

如果您确实从数据库请求了一个基于 n:n 关系的结果集,那么这可能是因为这代表了一种真实情况——例如,许多人从许多商店购买产品。以这种方式表示这种真实情况并不是低效的,因为结果集只是对事实的表示。

一般来说,一个 n:n 关系需要连接三个关系——数据库规范化有效地禁止了两个表之间的 n:n 关系,无论如何都是等值连接。

于 2013-06-14T22:35:05.457 回答