Phi*_*ord 12 sql postgresql performance case sql-update
对于性能,哪种选项对于要更新的大型数据集更好?
使用CASE语句或个人更新查询?
案例:
UPDATE tbl_name SET field_name =
CASE
WHEN condition_1 THEN 'Blah'
WHEN condition_2 THEN 'Foo'
WHEN condition_x THEN 123
ELSE 'bar'
END AS value
Run Code Online (Sandbox Code Playgroud)
个人查询示例:
UPDATE tbl_name SET field_name = 'Blah' WHERE field_name = condition_1
UPDATE tbl_name SET field_name = 'Foo' WHERE field_name = condition_2
UPDATE tbl_name SET field_name = 123 WHERE field_name = condition_x
UPDATE tbl_name SET field_name = 'bar' WHERE field_name = condition_y
Run Code Online (Sandbox Code Playgroud)
注意:大约300,000条记录将被更新,CASE语句将有大约10,000条WHEN条件.如果使用单个查询,它也是大约10,000
JNK*_*JNK 17
该CASE
版本.
这是因为您很有可能使用单个语句多次更改同一行.如果第10行同时存在condition_1
,condition_y
则需要读取并更改两次.如果您有聚簇索引,则意味着在修改的其他字段之外的两个聚簇索引更新.
如果您可以将它作为单个语句执行,则每行只读一次,并且运行速度要快得多.
我换了一个类似的过程大约一年前,用几十个UPDATE
顺序语句使用,因为UPDATE
使用CASE
和处理时间下降了约80%.