MySQL WHEN与WHERE的表现如何?

时间:2015-03-02 10:32:25

标签: mysql performance where

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

使用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是否使用索引?当表变得非常大时,哪种性能更好?

1 个答案:

答案 0 :(得分:4)

评论时间有点长。

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

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

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

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