0

我一直在尝试最后几天来解决以下问题。

假设我们有以下两个表。

电影(ID',标题,国家,制作_日期)

演员(ID'、姓名、类型、国籍)

演员(演员_ID',电影_ID',角色)

给定信息:

Film 拥有 N(film)=50.000 条记录,r(film)=40bytes,顺序组织,PK 索引

Actor 拥有 N(actor)=200.000 条记录 r(actor)=80bytes,堆组织,PK 上的索引

Cast 持有 N(cast)=100.000 条记录,r(cast)=25 字节,堆组织,无索引

执行计划的执行树和关系表达式如下图所示:

在此处输入图像描述

对于演员和电影之间的较低级别的连接,我正在计算以下内容:

块嵌套循环连接:Bcast x Bfilm

索引嵌套循环连接:Bcast + Ncast x Cfilm

我保留了 INLJ 给出的最小值。

问题:

现在我如何计算连接表的大小和新的 r,它是新连接表上记录的大小,以便在计算成本后继续计算已经连接的表与表 actor 之间的上层连接B中的那个join操作会占用多少块?

4

1 回答 1

1

我假设您想在 FILM.ID = CAST.FILM_ID 上进行自然连接,而 CAST.FILM_ID 是引用 FILM.ID 的外键。

1)一排大小:

Film 和 Cast 的连接导致形式的元组

[FILM_ID, TITLE, COUNTRY, PRODUCTION_DATE, ACTOR_ID, ROLE]. 

因此行大小应该类似于

R(FILM JOIN CAST) = R(FILM) + R(CAST) - R(FILM_ID)

因为 FILM_ID 是唯一共享的列。

2)行数:

N(FILM JOIN CAST) = N(CAST) 

因为 CAST 中的每一行在 FILM 中只有一行。

于 2017-01-30T17:33:48.243 回答