我是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的增长,这将会持续很长时间。有什么建议吗?
答案 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