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

标签 sql performance postgresql 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

单个查询示例:

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

注意:大约有 300,000 条记录将被更新,CASE 语句将有大约 10,000 个 WHEN 条件。如果使用单个查询,它也是大约 10,000

最佳答案

CASE 版本。

这是因为您很有可能多次使用单个语句更改同一行。如果第 10 行同时具有 condition_1condition_y,那么它将需要读取和修改两次。如果您有聚簇索引,这意味着在修改的任何其他字段之上进行两次聚簇索引更新。

如果您可以将其作为单个语句来执行,则每一行将只被读取一次并且它应该运行得更快。

大约一年前,我更改了一个类似的过程,该过程按顺序使用了数十个 UPDATE 语句,以使用 since UPDATECASE 并进行处理时间减少了大约 80%。

关于sql - CASE 与大型数据集的多个 UPDATE 查询 - 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9875145/

相关文章:

sql - 是否需要括号来提高 postgresql 的性能?

node.js - MongoDB 更改流非常慢

ios - Swift:如何向 memcpy(...) 添加偏移量

mysql - 使用 ssh 导入 .sql 文件

sql - 在Oracle中将SQL行转换为逗号分隔的值

javascript - 哪些比较运算符的处理器效率更高 : <, <=、!= 或 ==?

sql - 数组联合作为聚合函数

postgresql - postgres 和 docker-compose : can't create a custom role and database

mysql - mysql中的条件计数

sql - 如何确保非负列?