2

私はpostgresql(および一般的なデータベース)に不慣れであり、次のステートメントの効率を改善するためのいくつかの指針を得ることを望んでいました。

あるテーブルから別のテーブルにデータを挿入していますが、重複する値を挿入したくありません。インデックスが付けられ、主キーであるrid(各テーブルに一意の識別子)があります。

私は現在、次のステートメントを使用しています。

INSERT INTO table1 SELECT * FROM table2 WHERE rid NOT IN (SELECT rid FROM table1).

現在、テーブル1は200,000レコード、テーブル2は20,000レコードです。Table1は成長を続け(おそらく約2,000,000まで)、table2は約20,000レコードを維持します。現在のところ、ステートメントの実行には約15分かかります。Table1が大きくなるにつれて、これが長くなるのではないかと心配しています。助言がありますか?

4

2 に答える 2

3

これは、現在のクエリよりも効率的です。

INSERT INTO table1
SELECT * 
FROM table2
WHERE NOT EXISTS (
  SELECT 1 FROM table1 WHERE table1.rid = table2.rid
);
于 2012-10-25T16:56:52.353 に答える
1
insert into table1
select t2.*
from
    table2 t2
    left join
    table1 t1 on t1.rid = t2.rid
where t1.rid is null
于 2012-10-25T18:25:19.597 に答える