MySQL WHEN 与 WHERE 性能?

MySQL WHEN vs. WHERE in performance?

在一个查询中更新多行,两者都有效。

WHERE

UPDATE category
    SET description = CASE id
        WHEN 1 THEN 'good'
        WHEN 2 THEN 'bad'
        WHEN 3 THEN 'ugly'
    END
WHERE id IN (1,2,3)

没有 WHERE

UPDATE category
    SET description = CASE id
        WHEN 1 THEN 'good'
        WHEN 2 THEN 'bad'
        WHEN 3 THEN 'ugly'
    END

但这有什么区别呢? WHEN 是否使用索引?当 table 变得非常大时,哪个在性能方面更可取?

评论有点长

你的两个查询完全不同。第一个将仅影响具有 id 的三个值的行。第二个将影响所有行,将具有 id 的任何其他值的行的描述设置为 NULL。等效地,第二个查询应该是:

UPDATE category
    SET description = (CASE id
                           WHEN 1 THEN 'good'
                           WHEN 2 THEN 'bad'
                           WHEN 3 THEN 'ugly'
                           ELSE description
                       END);

这两个查询在语义上仍然不同,尽管对数据的影响是相同的。例如,此版本会在所有行上调用 update 触发器,而第一个版本只会在匹配 WHERE 条件的行上调用它。

如果您关心查询的性能和可维护性,您应该使用 WHERE 条件。