在临时表中更新表,在postgres中有很多行

时间:2016-02-22 13:36:42

标签: sql postgresql

我有一个名为repos的主表,以及来自csv的临时表,我希望与该名称匹配,并使用临时表中的新值更新值。我的代码有效,但速度很慢。

CREATE TEMP TABLE tmp(name text, language text);
COPY tmp FROM 'path/to/csv';

UPDATE repos
    SET language = x.language
FROM (
    SELECT * FROM tmp) x
WHERE repos.name = x.name

1 个答案:

答案 0 :(得分:2)

首先,子查询是不必要的。它并没有影响性能,但它很尴尬:

UPDATE repos
    SET language = x.language
FROM tmp x
WHERE repos.name = x.name;

对于此查询,您需要tmp(name, language)上的索引:

create index idx_tmp_name_language on tmp(name, language);

在填充表之后创建索引通常更快(而不是先创建索引然后再加载表)。