2017-01-30 9 views
1

私は最後の日に、次の質問に対する解決策を用意しています。DBMS:リレーショナル代数実行計画コスト計算

次の2つの表があるとします。

フィルム(ID 'タイトル、国、Production_Date)

俳優(ID'、名前、ジャンル、国籍)

キャストFilm_ID(ACTOR_ID」、 '、役割)

与えられた情報:

フィルムがN(フィルム)= 50.000レコード、R(フィルム)=の40bytes、シーケンシャル編成を保持し、インデックスPKに

俳優= 200.000レコードが(アクター)=の80bytes、ヒープが組織R N(アクター)を保持します、PKのインデックスは

キャストN(キャスト)= 100.000レコード、R(キャスト)= 25バイト、ヒープ組織化、無INDEXES

保持していない

実行プランの実行ツリーとの関係式は、次の画像であります:

低いレベルのために

は、キャストの間、私は以下の計算だ&フィルム参加:

ブロックネステッド・ループへの参加:BCAST X Bfilm

インデックスネステッド・ループ結合:+ Ncastは Cfilm

xはBCAST

私はINLJで与えられる最小の値を保持しています。

質問:

今、私が参加し、上位レベルを続行し、計算するために、結合テーブルのサイズと新しい結合テーブル上のレコードのサイズである新しいRを計算することができますかすでに結合されたテーブルとテーブルアクターとの間で、コストBを計算した後に結合操作がかかるでしょうか?

答えて

1

FILM.ID = CAST.FILM_IDで自然結合を行いたいと仮定し、CAST.FILM_IDはFILM.IDを参照する外部キーです。

1)一列のサイズ:

Aは、従って行サイズがので

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

ようなものでなければならない形式

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

のタプルフィルム及びキャスト結果の参加FILM_IDは共有される唯一の列です。行の

2)数:

N(FILM JOIN CAST) = N(CAST) 

CASTの各行用フィルムに正確に一つの行が存在するように。

+0

これは私が考えていたものですが、R(FILM_ID)を計算してR(FILM JOIN CAST)を計算するにはどうすればよいですか? – HelloIT

+0

理論的には、列CAST.FILM_IDのデータ型にのみ依存します。 4バイトの整数...など。 VARBINARYまたはVARCHARは予測しにくい。実装上はオーバーヘッドがあります。したがって、それは実際にRDBMS、スキーマ、およびデータに依存します。 – nCessity