5

ここで言う

選択と外積

クロス積は、評価するのに最もコストのかかる演算子です。入力リレーションに N 行と M 行がある場合、結果には NM 行が含まれます。したがって、外積演算子を適用する前に、両方のオペランドのサイズを減らすために最善を尽くすことが非常に重要です。

2 つの関係があるとします。

最初のリレーションは Student と呼ばれ、3 つの属性を持つため、

    student
  |a |b   |c |
  ------------
  |__|___|___|
  |__|___|___|
  |__|___|___|

2番目の関係は大学で、3つの属性があります

   university
  |e |f   |g |
  ------------
  |__|___|___|
  |__|___|___|
  |__|___|___|

リレーションごとに 3 つの行があるため、外積演算を適用すると、3*3 = 9 行のリレーションが得られます。

よくわかりませんが、なぜ 3 ではなく 9 なのですか?

最終的な関係はありません

 final relation
 |a |b   |c |d |e   |f |g |
 --------------------------
 |__|___|___|__|____|__|__|
 |__|___|___|__|____|__|__|
 |__|___|___|__|____|__|__|

これまた3列じゃない?

ありがとう

4

4 に答える 4

5

Student の行が行 1、行 2、および行 3 であり、大学の行が行 4、行 5、および行 6 である場合、デカルト積には以下が含まれます。

row1row4、row1row5、row1row6、row2row4、row2row5、row2row6、row3row4、row3row5、row3row6

行の可能な各組み合わせ。そのように定義されています。それ以上のことはありません。

「したがって、外積演算子を適用する前に、両方のオペランドのサイズを減らすために最善を尽くすことが非常に重要です。」という発言を除いて。特定の代数演算を「書き換える」ことができるオプティマイザーが存在することを理解することが重要です。「制限を他の操作と組み合わせる最も適切な方法」を決定する責任が常にクエリ作成者にあるというわけではありません。実際、「制限を可能な限り内側に移動する」ことは、産業用オプティマイザーが実際に非常に得意とすることの1つです。

于 2011-10-11T00:12:33.650 に答える
2

1 つは学生用、もう 1 つは大学用の 2 つのテーブルがあると想像してみてください。リレーショナル データベースに対してデカルト クエリを実行すると、すべての学生の行が取得され、それがすべての大学に結合されます。

Select *
   From students, 
        universities;

また

SELECT * FROM students CROSS JOIN universities

私はこれが代数とはほとんど関係がないことを知っていますが、あなたがスタックオーバーフローをしているので:D

于 2011-10-10T15:24:45.790 に答える
0

|a|e| |a|f| |a|g| |b|e| |b|f| |b|g| |c|e| |c|f| |c|g|

したがって 9

于 2011-10-23T03:10:27.893 に答える
0

学生と大学をリンクする共通の属性がないため、学生の各行は大学の各行に対応付けられます (3 * 3 = 9)。

于 2011-10-10T14:55:21.110 に答える