如果尚未设置值,我想更新一个值。
说我有桌子"运送"字段名为" status"。 有些已经发货,有些则没有。 我有一些ID,如果尚未设置,我想更新状态。
A)UPDATE shipping SET status = "shipped" WHERE ID in (2, 4, 6) AND status != "shipped"
是我到目前为止的
B)它是否甚至只保存内存以更新需要内存的内存?
答案 0 :(得分:0)
可能,取决于您的表架构和索引
mysql在设置字段时已经比较了旧内容,如果更新后的内容保持不变,则不写行。
但是,要测试旧内容,必须加载该行。如果你有很多列,那可能需要时间和内存(mysql在内部解压缩varchar列到它们的最大宽度)。
但是如果查询可以使用包含状态的索引(例如add index (ID, status)
)并且您明确检查查询中的状态,那么它可以检查必须从快速读取索引更改哪些行并且可以省略仅加载行以测试它们是否需要更新。