查询在PostgreSQL中花费太多时间

时间:2019-11-02 04:27:07

标签: postgresql sql-update postgresql-9.1 query-performance

我的表有2000万条记录。我的表包含两个字段(empno,ename)。 empno列包含值,但某些ename列不包含值。所以我试图使用下面的块来更新ename列。我为empno列创建了索引,但是此下面的代码块运行了10个以上 小时(未完成)

create table index_test(empno integer,ename varchar(50))

create index ix_index_test on index_test(empno,ename)



DO $$
<<first_block>>
DECLARE
X RECORD;
BEGIN
FOR X IN(SELECT EMPNO FROM INDEX_TEST)
LOOP
UPDATE INDEX_TEST SET ENAME='Raja'||x.empno where empno=x.empno AND ENAME IS NULL;
END LOOP;
END first_block $$;

样本数据

Empno     ENAME
15346070  Raja15346070
14208203
15392731
17419579
13287096

1 个答案:

答案 0 :(得分:0)

循环执行数百万个单行更新是确保关闭任何关系数据库的肯定方法。您可以使用一条UPDATE语句完成您想要的事情:

UPDATE index_test 
   SET ename = 'Raja'||empno 
WHERE ename IS NULL;

如果ename列中只有一小部分行包含NULL值,则以下索引可能会有所帮助:

create index on index_test (empno)
where ename is null;

但是,如果要更新大量的总行,则没有索引会有所帮助。实际上,添加索引可能会使速度变慢。

相关问题