2

我是 postgresql(和一般数据库)的新手,希望能获得一些关于提高以下语句效率的指示。

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

我目前正在使用以下语句:

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

截至目前,表一是 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 回答