我需要更新TableA ColC,其中ColD是'E'
TableA
自:
ColA | ColB | ColC | ColD
A B C D
A B S F
A B X E
Z Y W H
要:
ColA | ColB | ColC | ColD
A B X D
A B X F
A B X E
Z Y W H
我正在使用此
update tableA A
set ColC = ( select ColC
from tableA B
where B.ColD = 'E'
and A.ColA = B.ColA
and A.ColB = B.ColB )
where exist
( select 1
from tableA B
where B.ColD = 'E'
and A.ColA = B.ColA
and A.ColB = B.ColB )
总共需要更新400行。
问题是需要将近1分钟才能更新。
还有更有效的SQL要做更新吗?
答案 0 :(得分:2)
在表tableA上为ColD,ColA,ColB列创建索引。
CREATE INDEX ix_tableA ON tableA (ColD, ColA, ColB);
答案 1 :(得分:1)
更新所有行可能会更快(如果Subselect不返回任何内容,则执行虚拟更新):
update tableA A
set ColC = coalesce((select ColC
from tableA B
where B.ColD = 'E'
and A.ColA = B.ColA
and A.ColB = B.ColB),
ColC);