2013-09-26 71 views
0

有两种方式作为Multiple Updates in MySQL(前两个答案)指出,执行MySQL的多次更新MySQL多个更新 - 更好的性能?

但是,这是做,如果只有更新,而不是插入的更好的方式(性能明智)。

INSERT ... ON DUPLICATE KEY UPDATE 

OR 使用CASE WHEN

+0

你想使用UPDATE语句。 – Tom

+0

是的,我想知道哪个更有效更新CASE WHEN或INSERT ...在重复键更新? – Kaushik

回答

1

每个人都应该测量。

如果您在两个选项之间进行选择,第一个选项试图插入一行,并且违反唯一约束更新数据。第二种方法需要您想要更新的每个字段的布尔检查列表。列表的长度是您想要更新的行数。这对许多行来说是一个不好的选择。

带有INSERT的选项在parralel进程删除您尝试更新的几个行时可能会很危险。在这种情况下,它将尝试执行其主要任务:插入行。

但还有另一种选择:加入由UNION ALL分隔的一系列行,并将其与要更新的表相关联。这是我通常倾向于使用的选项。

UPD:我在链接的问题中添加了UNION ALL的答案。

+0

好主意,但是,当我们加入临时表时,它不使用索引,您认为这可能是一个问题吗? – Kaushik

+0

内部连接的顺序由MySQL的优化器选择。当你有一个加入真实表的子查询时(特别是在主键上),联接将始终从子查询开始,即查询效率很高。 – newtover

+0

@kaushik,看看相应的SELECT查询的EXPLAIN。 – newtover