使用一个查询优化更新多行

时间:2010-10-14 22:00:04

标签: mysql

我在很多场合使用过此查询,从未遇到过问题。我只想知道这是用1个查询更新10,000多行时的最佳选择吗?

我正在更新并更改邮政编码数据库,其中一些可能会变得非常大。

这就是我正在使用的(想象它是10,000多个邮政编码)

UPDATE postalcodes
SET user = CASE postal
  WHEN 'M4C 1A1' THEN '1'
  WHEN 'M4C 1A2' THEN '1'
  WHEN 'M4C 1A3' THEN '1'
END
WHERE postal IN ('M4C 1A1','M4C 1A2','M4C 1A3')

在所有情况下,更新USER时始终都是相同的。

我是正确地做到这一点还是有更快,优化的解决方案?感谢。

2 个答案:

答案 0 :(得分:0)

因为这会影响1000行,所以你可以将其作为交易。

如果在某些事情发生之间有些事情已经更新而有些事情没有更新,你必须再次检查。

如果使用事务提交和回滚是安全的,

你可以试试。但db引擎应该是innodb。你必须从Myisam改变它

http://dev.mysql.com/doc/refman/5.0/en/commit.html

答案 1 :(得分:0)

您可以在已设置值的情况下优化案例,这样您就不必费心更新不需要它的行。

UPDATE postalcodes
SET user = 1
WHERE postal IN ('M4C 1A1','M4C 1A2','M4C 1A3') and (user <> 1)