postgresql有效地将数据插入表中

时间:2012-10-25 16:50:12

标签: postgresql

我是postgresql(以及一般数据库)的新手,并希望得到一些关于提高以下声明效率的指示。

我将数据从一个表插入到另一个表中,并且不希望插入重复值。我有一个摆脱(每个表中的唯一标识符)被索引并且是主键。

我目前正在使用以下声明:

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

截至目前,表一是200,000条记录,table2是20,000条记录。 Table1将继续增长(可能大约2,000,000),table2将保持大约20,000条记录。截至目前,该声明大约需要15分钟才能运行。我担心随着Table1的增长,这将会持续很长时间。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

这应该比您当前的查询更有效:

INSERT INTO table1
SELECT * 
FROM table2
WHERE NOT EXISTS (
  SELECT 1 FROM table1 WHERE table1.rid = table2.rid
);

答案 1 :(得分:1)

insert into table1
select t2.*
from
    table2 t2
    left join
    table1 t1 on t1.rid = t2.rid
where t1.rid is null