テーブルの結合とテーブルのフィルタリング時に存在するものに違いはありますか?

ジョーc

2つのテーブルAとBがあり、キーkもBにあるAのサブセットを取得したいと考えていました。

1つのオプションは、結合を使用することです

select A.*
from A
join B on A.k = B.k

もう1つは

select A.*
from A
where exists (select *, B.k from B where A.k = B.k)

Bのフィールドkが一意である場合、それらは同じであると感じます。Sparkの場合、サブクエリによって実際に存在が考慮されますか?

Jacek Laskowski

最も簡単で最も真実の方法は、explain両方のクエリを実行し、それらの物理的な計画を比較することです。

scala> println(spark.version)
2.4.0

scala> sql("select A.* from A join B on A.k = B.k").explain
== Physical Plan ==
*(2) Project [k#10L]
+- *(2) BroadcastHashJoin [k#10L], [k#6L], Inner, BuildRight
   :- *(2) Project [id#8L AS k#10L]
   :  +- *(2) Range (0, 10, step=1, splits=8)
   +- BroadcastExchange HashedRelationBroadcastMode(List(input[0, bigint, false]))
      +- *(1) Project [id#4L AS k#6L]
         +- *(1) Range (0, 10, step=1, splits=8)

scala> sql("""select * from a where exists (select *, B.k from B where A.k = B.k)""").explain
== Physical Plan ==
*(2) Project [id#8L AS k#10L]
+- *(2) BroadcastHashJoin [id#8L], [k#6L], LeftSemi, BuildRight
   :- *(2) Range (0, 10, step=1, splits=8)
   +- BroadcastExchange HashedRelationBroadcastMode(List(input[0, bigint, false]))
      +- *(1) Project [id#4L AS k#6L, id#4L AS k#6L]
         +- *(1) Range (0, 10, step=1, splits=8)

彼らは似ているようですよね?

私は彼らが同じだと感じています

それらは上で証明された通りです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SQLクエリ:共通のフィールドで相互に結合して複数のテーブルからデータを取得しますが、どのテーブルにも確実にデータがあるという保証はありません。

分類Dev

CTE、サブクエリ、一時テーブル、またはテーブル変数の間にパフォーマンスの違いはありますか?

分類Dev

一時テーブルを使用する以外に、個別の手順でフィルタリング/ソートする方法はありますか?

分類Dev

テーブル2の列の値に基づいてテーブル1の行をフィルタリングします。テーブル1とテーブル2の間にアタッチメントはありません。

分類Dev

テーブルit_coursesフィールドcourse_branchの最初の行に2つの値があります。ブランチテーブルをit_coursesテーブルと結合すると、結果は1つだけになります

分類Dev

左側の結合の2つのテーブルには、両方ともidフィールドがあります。最初のデータベースからidフィールドをプルしようとしていますが、代わりに2番目のデータベースを取得しています

分類Dev

サブクエリよりもグループの結果をテーブルと結合するより効率的な方法はありますか?

分類Dev

同じテーブルに存在するnull値とともに列に基づいて他のテーブルからデータをフィルタリングしますか?

分類Dev

テーブルを結合していくつかの行をフィルタリングするにはどうすればよいですか?

分類Dev

フィルタリング後に2つのテーブルを結合するにはどうすればよいですか?

分類Dev

PostgreSQLはテーブルを結合し、2つのテーブルをフィルタリングします

分類Dev

1つのテーブルの2つの列とRの別のテーブルの結果の依存関係に基づいて結果をフィルタリングするにはどうすればよいですか?

分類Dev

Hibernate HQLでは、メインテーブルを親とする結合テーブルの結果をどのようにフィルタリングしますか?

分類Dev

インクルードを使用するときに、結合されたテーブルのフィールドでフィルタリングする

分類Dev

mysqlで2つのテーブルを結合する方法ですが、2つのテーブルの間に日付の違いがありますか?

分類Dev

値が別のテーブルに存在する場合のテーブルのインデックスリストのフィルタリング

分類Dev

あるテーブルからデータを選択し、メインの「キー」として別のテーブルを結合するのは非常に時間がかかります

分類Dev

JPAは、列とエンティティを結合テーブルにリンクする方法をどのように知っていますか?

分類Dev

優先順位順に各グループの列に値が存在する場合、SQLテーブルの行をフィルタリングします

分類Dev

結合テーブルを別のテーブルに結合する必要がありますか?

分類Dev

アクティブレコードのある結合テーブルを使用するときに、モデルの複数のインスタンスと結合するにはどうすればよいですか?

分類Dev

1つのテーブルのデータを使用して、結合せずに2番目のテーブルをフィルタリングする

分類Dev

別のテーブルSQLの行のいずれかに値が存在する場合、結果をフィルターで除外します

分類Dev

外部キーを作成するときに、リンクされたテーブルのフィールドも含める必要がありますか?

分類Dev

結合条件に基づいてデータをフィルタリングせずに2つのテーブルを結合する

分類Dev

EFインクルードテーブルから取得するときにレコードをフィルタリングする方法はありますか

分類Dev

qkdbの垂直結合に関するパーティションテーブルと非パーティションテーブルの違い

分類Dev

qkdbの垂直結合に関するパーティションテーブルと非パーティションテーブルの違い

分類Dev

特定のフィールドが別のテーブルに存在するテーブルからカウントする最も速い方法は?

Related 関連記事

  1. 1

    SQLクエリ:共通のフィールドで相互に結合して複数のテーブルからデータを取得しますが、どのテーブルにも確実にデータがあるという保証はありません。

  2. 2

    CTE、サブクエリ、一時テーブル、またはテーブル変数の間にパフォーマンスの違いはありますか?

  3. 3

    一時テーブルを使用する以外に、個別の手順でフィルタリング/ソートする方法はありますか?

  4. 4

    テーブル2の列の値に基づいてテーブル1の行をフィルタリングします。テーブル1とテーブル2の間にアタッチメントはありません。

  5. 5

    テーブルit_coursesフィールドcourse_branchの最初の行に2つの値があります。ブランチテーブルをit_coursesテーブルと結合すると、結果は1つだけになります

  6. 6

    左側の結合の2つのテーブルには、両方ともidフィールドがあります。最初のデータベースからidフィールドをプルしようとしていますが、代わりに2番目のデータベースを取得しています

  7. 7

    サブクエリよりもグループの結果をテーブルと結合するより効率的な方法はありますか?

  8. 8

    同じテーブルに存在するnull値とともに列に基づいて他のテーブルからデータをフィルタリングしますか?

  9. 9

    テーブルを結合していくつかの行をフィルタリングするにはどうすればよいですか?

  10. 10

    フィルタリング後に2つのテーブルを結合するにはどうすればよいですか?

  11. 11

    PostgreSQLはテーブルを結合し、2つのテーブルをフィルタリングします

  12. 12

    1つのテーブルの2つの列とRの別のテーブルの結果の依存関係に基づいて結果をフィルタリングするにはどうすればよいですか?

  13. 13

    Hibernate HQLでは、メインテーブルを親とする結合テーブルの結果をどのようにフィルタリングしますか?

  14. 14

    インクルードを使用するときに、結合されたテーブルのフィールドでフィルタリングする

  15. 15

    mysqlで2つのテーブルを結合する方法ですが、2つのテーブルの間に日付の違いがありますか?

  16. 16

    値が別のテーブルに存在する場合のテーブルのインデックスリストのフィルタリング

  17. 17

    あるテーブルからデータを選択し、メインの「キー」として別のテーブルを結合するのは非常に時間がかかります

  18. 18

    JPAは、列とエンティティを結合テーブルにリンクする方法をどのように知っていますか?

  19. 19

    優先順位順に各グループの列に値が存在する場合、SQLテーブルの行をフィルタリングします

  20. 20

    結合テーブルを別のテーブルに結合する必要がありますか?

  21. 21

    アクティブレコードのある結合テーブルを使用するときに、モデルの複数のインスタンスと結合するにはどうすればよいですか?

  22. 22

    1つのテーブルのデータを使用して、結合せずに2番目のテーブルをフィルタリングする

  23. 23

    別のテーブルSQLの行のいずれかに値が存在する場合、結果をフィルターで除外します

  24. 24

    外部キーを作成するときに、リンクされたテーブルのフィールドも含める必要がありますか?

  25. 25

    結合条件に基づいてデータをフィルタリングせずに2つのテーブルを結合する

  26. 26

    EFインクルードテーブルから取得するときにレコードをフィルタリングする方法はありますか

  27. 27

    qkdbの垂直結合に関するパーティションテーブルと非パーティションテーブルの違い

  28. 28

    qkdbの垂直結合に関するパーティションテーブルと非パーティションテーブルの違い

  29. 29

    特定のフィールドが別のテーブルに存在するテーブルからカウントする最も速い方法は?

ホットタグ

アーカイブ