私はそれぞれ120,000,000レコードを含む2つのSQLテーブルを扱っています。ほとんどのレコード(約60,000)は2つのテーブルに重複しています。両方のテーブルの構造は同じです。UNIONとFULL OUTER JOINの実行の詳細
各テーブルには40個の列があります。私はテーブルの一つにレコードを結合する必要があります。
私はそれを行う2つの方法を知っています(どちらも私に望ましい出力を与えます)。私はどちらの方法が良いか知りたいと思いますし、より良い方法がありますか?
方法1:
SELECT * INTO Table1_copy FROM Table1
DROP TABLE Table1
SELECT * INTO Table1 FROM Table1_copy
UNION
SELECT * FROM Table2
DROP TABLE Table1_copy
方法2:UNION
の
INSERT INTO Table1 <br>
SELECT Table2.Col1, Table2.Col2 <br>
FROM TAB1 <br>
FULL OUTER JOIN Table2 <br>
ON Table1.Col1 = Table2.Col1 AND Table1.Col2 = Table2.Col2 <br>
WHERE Table1.Col1 IS NULL AND Table1.Col2 IS NULL
使用がより良い選択であるように見えるが、に大規模なデータセットを選択する必要が周りのスペースの問題に対処するために、誰もができるようです新しいテーブルとそれを落とす。 120,000,000レコードは単なる一例に過ぎません。より多くのレコードを持つ他のテーブルがあります。
[ユニオンまたはAの結合を使用する - より速いもの]の可能な複製(http://stackoverflow.com/questions/2309936/use-a-union-or-a-join-what-is-faster) – SaggingRufus
おそらく、UNION ALLよりもUNION ALLが高速です。 – jarlh
「LEFT JOIN」が必要なときに「FULL OUTER JOIN」を使用する理由がわかりません。また、Col1とCol2の両方がNULLかどうかを確認する必要はありません。 NULL値がNULLに等しくないため、Col1がNULLの場合、Table1はTable2と等しくない可能性があります。 'WHERE Table1.Col1 IS NULL'を使用してください –