我有一个名为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
答案 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);
在填充表之后创建索引通常更快(而不是先创建索引然后再加载表)。