【问题标题】:Size of two joined tables in SQL with primary key带有主键的 SQL 中两个连接表的大小
【发布时间】:2019-11-27 18:55:22
【问题描述】:

我想知道如果将具有主键 x 的表与另一个表连接,是否会告诉我们有关结果表大小的任何信息,例如考虑以下查询:

SELECT r.*,s.* FROM r, s WHERE r.a = s.x;

rs是两个任意表,分别包含nm元组。如果我们将x 视为s 的主键,它是否会改变我们对它们连接大小的看法?或者如果ax永远不相等,它是否总是在0之间变化,如果ax相同,则n(或m)。

【问题讨论】:

  • 你是如何测量尺寸的?结果行数,字节数,结果列数?你的问题很不清楚。
  • 另外,请使用现代 JOIN 语法,自 SQL-92 起可用。
  • 我实际上是在寻找结果行数和列数。
  • 1) 列数很简单:它是两个表的列的总和。 2)但是,行数取决于数据;问问自己:是否存在与连接谓词匹配的行?结果行数可以是0n x m 之间的任何值。

标签: sql database join primary-key


【解决方案1】:

您的方案生成的连接大小将介于 0 和小于或等于总和(表 r 的大小 + 表 s 的大小)之间。各个表的大小通常是平均行长度 * 行数/元组数。

【讨论】:

  • 向其中一个表添加主键是否对结果表的大小有任何影响?我的意思是它可以帮助我们缩小它的大小吗?
  • 如果您将连接列作为两个表中的主键,则可以确保您具有控制行数的 1-1 关系。行的大小取决于您选择的列。这两者的组合为您提供了最终尺寸。如果这有用,请接受我的回答
【解决方案2】:

这是您的查询:

SELECT r.*, s.*
FROM r JOIN
     s 
     ON r.a = s.x;

如果xs 中的主键,则它永远不会重复。显然,查询可以返回零行。最大值是多少?

嗯,每个x 都是独一无二的。 r 中的每一行最多可以匹配s 中的一行。因此,上限是r 中的行数。因为a不是r中的主键,所以可以重复。 r 中的所有行可以具有相同的值。

所以,返回的行数介于 0 和 r 中的行数之间。

【讨论】:

    猜你喜欢
    • 2012-09-17
    • 2017-01-25
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 2010-12-20
    • 2015-12-04
    • 1970-01-01
    相关资源
    最近更新 更多