更新与选择

时间:2012-03-26 12:11:16

标签: mysql performance select

我使用MySQL作为数据库。我需要更新一些数据。但是数据可能没有改变,所以在这种情况下我可能不需要更新行。

我想知道哪一个会更好(表现明智):

a)搜索表格以确定数据是否已更改。例如,我可以按主键搜索,然后查看剩余字段的值是否已更改。如果是,则继续更新语句,如果没有,则保留。

b)直接使用UPDATE查询。如果数据没有变化,MySQL将自动忽略它并且不处理更新数据。

在这种情况下哪一个会表现得更好。

3 个答案:

答案 0 :(得分:3)

来自MySQL manual

  

如果将列设置为当前的值,MySQL会注意到这一点   并且不会更新它。

因此,请保存自己的延迟并将该任务留给MySQL。它甚至会告诉你实际受影响的行数。

答案 1 :(得分:0)

第一种选择对我来说似乎更好,但在特定的场景中。

  • 从表格中选择所有或部分行,并将其置于结果集
  • 遍历结果集,因为内存中遍历非常快,并选择要更新其记录的主键,然后执行更新查询。

与在每行上执行更新查询相比,无论您是否需要这样做,对我来说这似乎是比较高效的解决方案。

答案 2 :(得分:0)

如果你使用select-then-update方法,你需要锁定行(例如select for update),否则你处于竞争状态 - 你选择并检查它之后就可以更改行了改变了。

正如@AndreKR所指出的,如果值相同,MySQL将不执行任何写操作,因此直接使用update比使用2个查询更快。