我的表有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
答案 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;
但是,如果要更新大量的总行,则没有索引会有所帮助。实际上,添加索引可能会使速度变慢。