2012-11-22 28 views
7

NDPR(ディスクページの読み込み回数)の観点から(最も効率的な)ブロックネストループジョインのコストを計算しようとしています。ブロックネストループジョインのコストの計算

SELECT COUNT(*) 
FROM county JOIN mcd 
ON count.state_code = mcd.state_code 
AND county.fips_code = mcd.fips_code 
WHERE county.state_code = @NO 

ここで、@NOはクエリの実行ごとに状態コードに置き換えられます。

は、私が使用NPDRを導き出すことができることを知っている:NPDR(R x S) = |Pages(R)| + Pages(R)/B - 2 . |P ages(S)|

(小さなテーブルが少ないページを生成するために、外側として使用される読み出しエルゴ: R =郡、S = MCD)。

私はまた、ページサイズ=私は「WHERE county.state_code = @NOは」私のコストにどのような影響を与えるかで把握しようとしています何

Pointer = 8 byte 
Num. rows in mcd table = 35298 
Num. rows in county table = 3141 
Free memory buffer pages B = 100 
Pages(X) = (rowsize)(numrows)/pagesize 

2048のバイトを知っていますか?

お時間をいただきありがとうございます。あなたが書いた式について、観測のカップル

+2

NDPR(またはNPDR)とは何ですか?私は数式からダーティページの読み取りの数のような何かを推測しています。 – Laurence

+0

はい、申し訳ありません。私はそれを指定するべきだった。 NPDR =ページディスクの読み取り数。 – JB2

答えて

1

ファースト: - ではなく「B - 1」の

  • 私はあなたが「2 B」を書き込み、なぜそれをわかりません。理論的な観点からは、Sという関係で読むには単一のバッファーページが必要です(一度に1ページずつ読むことで行うことができます)。

  • 必ずすべての括弧を使用してください。式中のすべての数字を切り上げする必要があるであろう
    NPDR(R x S) = |Pages(R)| + |Pages(R)|/(B-2) * |Pages(S)|

  • (しかし、これはつべこべです):私はような式を記述します。

  • ジェネリックBNLJ式の説明:あなたはB-1またはB-2ページの価値(メモリ内に保つことができるよう

    • あなたが小さい関係(R)などから多くのタプルを読み込みますタプルの)。

    • R.

      関係の特定の範囲のために参加を実行するには、(| |ページは、(S))のタプルの価値はB-2ページのグループごとに
    • は、あなたがして、全体Sの関係を読まなければなりません

      結合の終了時に、関係Rは正確に1回読み込まれ、関係Sはメモリバッファを満たした回数、つまり|Pages(R)|/(B-2)回読み込まれます。

      • あなたの例では、選択基準は、関係R(この場合は、テーブルの国)に適用されます。今すぐ答え

    。これはクエリの一部であるWHERE county.state_code = @NOです。したがって、一般式は直接適用されません。関係式Rから読み出す場合(すなわち、、table Country)を選択すると、選択条件と一致しないすべての非修飾タプルを破棄できます。米国に50州があり、すべての州に同じ数の郡があると仮定すると、テーブル国のタプルの2%だけが平均してメモリに格納する必要があります。これは、結合の内部ループの反復回数(すなわち、関係S /テーブルmcsを走査する必要がある回数)を減少させる。 2%の数値は明らかに予想平均値であり、実際の所与の状態に応じて変化します。あなたの問題のため

  • したがって、次のようになります。
    NPDR(R x S) = |Pages(County)| + |Pages(County)|/(B - 2) * |Counties in state @NO|/|Rows in table County| * |Pages(Mcd)|

関連する問題