CASE与大数据集的多个UPDATE查询 - 性能

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%.