sql >> データベース >  >> RDS >> Mysql

ユニオンまたはジョインを使用する-何が速いか

    ユニオンは、最初のSELECTステートメントを渡し、次に2番目のSELECTステートメントを解析して、結果を出力テーブルの最後に追加するだけなので、より高速になります。

    結合は両方のテーブルの各行を通過し、他のテーブルで一致するものを見つけるため、すべての行で一致する行を検索するため、さらに多くの処理が必要になります。

    編集

    ユニオンとは、あなたが達成しようとしていたことには十分であると思われるユニオンオールを意味します。通常のユニオンは一般的に参加よりも高速ですが。

    編集2(@seebiscuitのコメントへの返信)

    私は彼に同意しません。技術的に言えば、結合がどれほど優れていても、「JOIN」は純粋な連結よりも高価です。自分のブログでそれを証明するためにブログ投稿を行いました codePERF [dot] net 。実際には、これらは2つのまったく異なる目的を果たします。インデックス作成が適切であり、ジョブに適切なツールを使用していることを確認することがより重要です。

    技術的には、私のブログ投稿から抜粋した次の2つの実行計画を使用して合計できると思います。

    UNION ALL 実行計画

    JOIN 実行計画

    実用的な結果

    実際には、クラスター化されたインデックスルックアップの違いはごくわずかです。



    1. 2SQLiteのサンプルデータベース

    2. PostgreSQLでコンマを使用して数値をフォーマットする

    3. SQLで複数のテーブルを結合する

    4. MySQLは最高値でDISTINCTを選択します