2

タイトルのとおり: データを入力する必要があるテーブルがあります。そのテーブルに入れるデータのソースが 2 つあります。どちらが速くなりますか:

INSERT INTO foo
SELECT bar, baz FROM xxxx;

INSERT INTO foo
SELECT beq, que FROM yyyyy;

また:

INSERT INTO foo
SELECT * FROM (
SELECT bar, baz FROM xxxx
UNION
SELECT beq, que FROM yyyyy ) src;

PostgreSQL 9.1 を使用しています。

4

2 に答える 2

3

2回ではなく1回のトランザクションだからといって、2回の挿入よりも高速だと思いますunion allが、私はDBAではありません。テーブル内の行数/列の種類に依存する可能性があると思います。それぞれ 1 000 000 レコードを持つ 2 つのテーブルで、PostgreSQL 9.2.4 の SQL フィドルでテストされています。結果:

2 回の挿入 ~ 2600ミリ秒
1 回の挿入でユニオン ~ 10800ミリ秒 -重複をなくすにはコストがかかります。
ユニオンオール付きの 1 インサート ~ 2460 ms

それを見てsql fiddle demo

于 2013-08-28T10:38:52.700 に答える
1

私の場合(〜7500行を挿入)、違いは約2秒でした(UNION ALLの方が速かった)。

于 2013-08-29T09:08:26.297 に答える