使用 CASE WHEN/THEN/ELSE 进行 MySQL 更新:克服性能问题和选择性更新
使用大型表时,优化更新查询变得对于确保性能至关重要。 MySQL CASE 功能提供了强大的条件更新机制,但误用它可能会产生意想不到的后果。
一个常见问题,如问题陈述中所述,是意外更新表中的所有行,而不是更新表中的所有行。具体的。这是由于 CASE 的默认行为造成的:如果未指定 ELSE 子句,则所有不匹配任何 WHEN 条件的行都将更新为 NULL。对于大型表来说,这可能会出现问题,因为它会触发不必要的更新并导致系统资源紧张。
为了避免此问题,开发人员必须显式包含一个 ELSE 子句,该子句指定 WHEN 条件未涵盖的行的默认行为。例如,在提供的示例中,添加 ELSE uid 子句可确保与任何指定 ID 不匹配的所有行将保留其现有的 uid 值:
UPDATE `table` SET `uid` = CASE WHEN id = 1 THEN 2952 WHEN id = 2 THEN 4925 WHEN id = 3 THEN 1592 ELSE `uid` END WHERE id in (1,2,3)
通过将 WHERE 子句限制为特定要更新 ID,此修改后的查询可确保仅影响必要的行。这种方法避免了过多的更新并最大限度地减少了性能开销,同时保持了数据完整性。
以上是如何优化 MySQL CASE WHEN/THEN/ELSE 更新以提高性能和选择性行修改?的详细内容。更多信息请关注PHP中文网其他相关文章!