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
条件。
在一个查询中更新多行,两者都有效。
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
条件。