我想知道是否将具有主键x
的表与另一个表连接,可以告诉我们有关结果表大小的任何信息,例如,考虑以下查询:
SELECT r.*,s.* FROM r, s WHERE r.a = s.x;
r
和s
是两个分别包含n
和m
元组的任意表。如果我们将x
作为s
的主键,是否会改变我们对联接大小的看法?如果0
和a
永远不相等,或者x
和n
相同,则它总是在m
之间变化。
您的方案的结果联接的大小将在0到小于或等于sum(表r的大小+表s的大小)之间。各个表的大小通常是平均行长度*行数/元组数。
这是您的查询:
a
如果x
是SELECT r.*, s.*
FROM r JOIN
s
ON r.a = s.x;
中的主键,则永远不会重复。显然,查询可以返回零行。最大值是多少?
嗯,每个x
是唯一的。 s
中的每一行最多可以匹配x
中的每一行。因此,上限为r
中的行数。由于s
不是r
中的主键,因此可以重复。 a
中的所有行都可以具有相同的值。
因此,返回的行数在0和r
中的行数之间。