对于性能而言,对于要更新的大型数据集,哪个选项更好?
使用 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_1
和 condition_y
,那么它将需要读取和修改两次。如果您有聚簇索引,这意味着在修改的任何其他字段之上进行两次聚簇索引更新。
如果您可以将其作为单个语句来执行,则每一行将只被读取一次并且它应该运行得更快。
大约一年前,我更改了一个类似的过程,该过程按顺序使用了数十个 UPDATE
语句,以使用 since UPDATE
和 CASE
并进行处理时间减少了大约 80%。
关于sql - CASE 与大型数据集的多个 UPDATE 查询 - 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9875145/