举个例子,我们以 PostgreSQL 为例,假设我们有两个具有一对多关系的表。进行 INNER JOIN 会从第一个表中产生“重复项”。这些重复的行是否真的在数据库连接级别上作为数据库中相同数据的副本返回,或者它们只是客户端上数据的表示形式以将该数据放入表中?
举个例子,我们以 PostgreSQL 为例,假设我们有两个具有一对多关系的表。进行 INNER JOIN 会从第一个表中产生“重复项”。这些重复的行是否真的在数据库连接级别上作为数据库中相同数据的副本返回,或者它们只是客户端上数据的表示形式以将该数据放入表中?
让我们尝试一下看看。
是的,数据确实是重复的。在recvfrom() 调用中,有超过200 个a。
到目前为止,我在这里看到的回复有很多混乱,但 jjanes 是正确的。你原来的问题是:
是的,在一对多(或多对多)关系中, a
JOIN
将导致数据在多对多的另一侧的行中重复(在多对多关系中,这会导致重复)两侧)。从逻辑角度来看,这意味着当数据来自数据库层时,甚至在到达客户端之前,数据的结构都是重复的。客户端不进行复制。
从物理角度来看,数据确实是重复的(通常在查询执行期间位于内存中)。这意味着,如果本机表中存在单个字符列占用 1 个字节的数据,那么如果将其从 中复制 5 次
JOIN
,则复制将导致 5 个物理字节的数据存在。这将是通过网络传输的 5 个字节的数据,并返回到客户端。请注意,这并不是复制磁盘上原始基表中的数据。它是通常驻留在内存中的临时副本。