我一直在尝试最后几天解决以下问题。
让我们假设我们有以下两个表。
胶片(ID”,标题,国家,Production_Date)
演员(ID”,名称,流派,国籍)
角色(Actor_ID 'Film_ID',角色)
鉴于信息:
电影持有N(电影)= 50.000条记录,r(电影)= 40字节,顺序组织,PK指数
演员持有N(演员)= 200.000记录r(演员)= 80bytes,堆有组织,PK上的索引
Cast持有N(强制转换)= 100.000条记录,r(强制转换)= 25字节,堆有条理,无索引
执行计划的执行树和关系表达式如下图所示:
对于演员与演出之间的较低级别的连接电影我正在计算以下内容:
阻止嵌套循环加入:Bcast x Bfilm
索引嵌套循环加入:Bcast + Ncast x Cfilm
我保持INLJ给出的最小值。
问题:
现在我如何计算联接表的大小和新r,它是新连接表上记录的大小,以便继续计算已连接表与表之间的上层连接在计算了加入操作的块中的成本B之后的演员?
答案 0 :(得分: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中只有一行。